ALTER FUNCTION dbo.checkMaxInv ( @starting Datetime, @ending Datetime )RETURNS @CustMostRecent TABLE (CustCode varchar (12) primary key, CustName varchar (30), SalesID varchar (12), InvDate Datetime) AS BEGIN INSERT INTO @CustMostRecent SELECT Billing.CustCode, CustCode.CustName, CustCode.SalesID, MAX(Billing.InvDate) AS mostRFROM Billing INNER JOIN CustCode ON Billing.CustCode = CustCode.CustCode WHERE (Billing.InvDate BETWEEN @starting AND @ending) AND (Billing.InvoiceTotal > 0) GROUP BY Billing.CustCode, CustCode.CustName, CustCode.SalesID RETURN END
CREATE TABLE #Billing (CUSTCODE VARCHAR ,SALESID VARCHAR ,AMTPAIDSOFAR INT ,INVDATE DATETIME);CREATE TABLE #CUSTCODE (CUSTCODE VARCHAR ,CUSTNAME VARCHAR(20) ,SALESID VARCHAR);INSERT INTO #CUSTCODESELECT '1', 'Dwain', '1' UNION ALL SELECT '2', 'llcooldre', '2' UNION ALL SELECT '3', 'Dr Dobbs', '3'INSERT INTO #BillingSELECT '1', '1', 400, '2012-01-01'UNION ALL SELECT '1', '2', 400, '2012-01-20'UNION ALL SELECT '2', '1', 400, '2012-01-31'UNION ALL SELECT '2', '2', 400, '2012-02-28'UNION ALL SELECT '2', '3', 400, '2013-01-01'UNION ALL SELECT '3', '1', 400, '2011-01-01'UNION ALL SELECT '3', '2', 400, '2011-02-01'UNION ALL SELECT '3', '3', 400, '2011-03-01'DECLARE @StartDate DATE = '2012-12-01' ,@EndDate DATE = '2012-12-31';WITH EligibleInvoices AS ( SELECT CUSTCODE, SALESID, AMTPAIDSOFAR, INVDATE ,MostRecent=ROW_NUMBER() OVER (PARTITION BY CUSTCODE ORDER BY INVDATE DESC) FROM #Billing) SELECT a.CUSTCODE, a.CUSTNAME ,MostRecent=CASE WHEN DATEADD(day, 365, INVDATE) > @StartDate THEN INVDATE ELSE NULL ENDFROM #CUSTCODE aLEFT JOIN EligibleInvoices b ON a.CUSTCODE = b.CUSTCODEWHERE MostRecent = 1 AND AMTPAIDSOFAR > 0DROP TABLE #BillingDROP TABLE #CUSTCODE
... DateColumn >= @ StartDate and DateColumn < @EndDate
declare @StartDate datetime = '20120301', -- Using datetime as the data is date/time oriented @EndDate datetime = '20120401'; -- or dateadd(mm,1,@StartDate)... DateColumn >= @ StartDate and DateColumn < @EndDate
DECLARE @StartDate DATE = '20120301', @EndDate DATE = '20120331';... DateColumn BETWEEN @StartDate AND @EndDate... DateColumn >= @StartDate and DateColumn <= @EndDate