Please start any new threads on our new site at https://forums.sqlteam.com. We've got lots of great SQL Server experts to answer whatever question you can come up with.

 All Forums
 SQL Server 2000 Forums
 SQL Server Development (2000)
 Need insight to behavior of this query

Author  Topic 

AskSQLTeam
Ask SQLTeam Question

0 Posts

Posted - 2001-04-12 : 16:56:04
Ken writes "Using the script below to set up the sample table/data, this query is supposed to join the transaction record with the client record whos last_update_date is closest to the transactions txn_date, with out going over. It almost works... please see what I am doing wrong.


SELECT t.AcctNo AS TxnAcct
, t.TXN_DATE
, c.ACCOUNT AS ClientAcct
, c.LAST_DATE

FROM Transaction_2001 t
LEFT OUTER JOIN Client c
ON t.AcctNo = c.ACCOUNT
AND t.TXN_DATE >
(SELECT COALESCE((Select MAX(c1.Last_Date)
FROM client c1 WHERE c1.Last_Date < COALESCE (c.Last_Date, '1/1/9999')
AND c1.ACCOUNT = t.AcctNo), '1/1/1900'))

AND t.TXN_DATE <
(SELECT COALESCE((select MIN(c2.Last_Date)
FROM client c2 WHERE c2.Last_Date > COALESCE (c.Last_Date, '1/1/1900')
AND c2.ACCOUNT = t.AcctNo), '1/1/9999'))

-- Create the Client table

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[Client]') and OBJECTPROPERTY(id, N'IsUserTable') = 1) drop table [dbo].[Client]

CREATE TABLE [dbo].[Client] ( [ACCOUNT] [char] (6) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL , [STATUS] [char] (1) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL , [DATE] [datetime] NOT NULL , [NAME] [char] (40) COLLATE SQL_Latin1_General_CP1_CI_AS NULL , [PREF_VENDOR] [char] (1) COLLATE SQL_Latin1_General_CP1_CI_AS NULL , [PROD_TOLLERANCE] [decimal](5, 2) NULL , [LAST_DATE] [datetime] NULL , [AGREEMT_FLAG] [char] (1) COLLATE SQL_Latin1_General_CP1_CI_AS NULL ) ON [PRIMARY]

ALTER TABLE [dbo].[Client] WITH NOCHECK ADD CONSTRAINT [PK_Client] PRIMARY KEY CLUSTERED ( [ACCOUNT], [STATUS], [DATE] ) WITH FILLFACTOR = 90 ON [PRIMARY]

exec sp_addextendedproperty N'MS_Description', N'Clients Account Number', N'user', N'dbo', N'table', N'Client', N'column', N'ACCOUNT' exec sp_addextendedproperty N'MS_Description', N'Denotes Active Record (A) or History Record (H)', N'user', N'dbo', N'table', N'Client', N'column', N'STATUS' exec sp_addextendedproperty N'MS_Description', N'Date Active Record (A) or History Record (H) was added', N'user', N'dbo', N'table', N'Client', N'column', N'DATE' exec sp_addextendedproperty N'MS_Description', N'Denotes Client Record Last Update Date', N'user', N'dbo', N'table', N'Client', N'column', N'LAST_DATE'

-- Insert some sample client data

INSERT [dbo].[Client] Values('ABC', 'A', '05/25/1994', 'JOE SCHMOE', 'Y', '.00', '04/18/2000', 'Y') INSERT [dbo].[Client] Values('ABC', 'H', '05/25/1994', 'JOE SCHMOE', 'N', '.00', NULL, 'Y') INSERT [dbo].[Client] Values('ABC', 'H', '05/13/1999', 'JOE SCHMOE', 'N', '.00', '05/25/1994', 'Y') INSERT [dbo].[Client] Values('ABC', 'H', '04/18/2000', 'JOE SCHMOE', 'N', '.00', '05/13/1999', 'Y')

INSERT [dbo].[Client] Values('DEF', 'A', '05/25/1999', 'JOHN PUBLIC', 'Y', '.00', '06/11/1999', 'Y') INSERT [dbo].[Client] Values('DEF', 'H', '06/11/1999', 'JOHN PUBLIC', 'Y', '.00', NULL, 'Y')

INSERT [dbo].[Client] Values('GHI', 'A', '05/25/1994', 'KAREN SMITH', 'Y', 7.50, '04/18/2000', 'Y') INSERT [dbo].[Client] Values('GHI', 'H', '05/13/1999', 'KAREN SMITH', 'N', 7.50, NULL, 'Y') INSERT [dbo].[Client] Values('GHI', 'H', '04/18/2000', 'KAREN SMITH', 'N', 7.50, '05/13/1999', 'Y')

INSERT [dbo].[Client] Values('JKL', 'A', '05/25/1994', 'VAN ORTON', 'Y', 5.00, '05/13/1999', 'Y') INSERT [dbo].[Client] Values('JKL', 'H', '05/13/1999', 'VAN ORTON', 'Y', 5.00, NULL, 'Y')


-- Create the Transaction table

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[Transaction_2001]') and OBJECTPROPERTY(id, N'IsUserTable') = 1) drop table [dbo].[Transaction_2001]

CREATE TABLE [dbo].[Transaction_2001] ( [TXN_DATE] [datetime] NULL , [SEQUENCE_NO] [char] (9) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL , [FILLER] [char] (7) COLLATE SQL_Latin1_General_CP1_CI_AS NULL , [AcctNo] [char] (3) COLLATE SQL_Latin1_General_CP1_CI_AS NULL ) ON [PRIMARY]
   

- Advertisement -