рдПрд╕рдХреНрдпреВрдПрд▓ рдЬрд╣рд╛рдВ рджрд┐рдирд╛рдВрдХ рдЕрдВрддрд░рд╛рд▓ рдХреЗ рд╕рд╛рде рдЦрдВрдб - рдХреМрди рд╕рд╛ рддрд░реАрдХрд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╣реИ?
рд╕рдВрджрд░реНрдн

рдбреЗрдЯрд╛ рдкреНрд░реЛрдЯреЗрдХреНрд╢рди рдПрдХреНрдЯ рдХреЗ рдХрд╛рд░рдг, рдХреБрдЫ рдбреЗрдЯрд╛ рдХреЛ рд╕рд┐рд╕реНрдЯрдо рд╕реЗ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╕рдордп рдкрд░ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬреНрдпрд╛рджрд╛рддрд░ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдпрд╣ рд╕рд╛рдд рд╕рд╛рд▓ рдХрд╛ рд╣реЛрддрд╛ рд╣реИред
рдЬрдм рдПрдХ рдХреНрд▓рд╛рдЗрдВрдЯ рд╕рд╛рдЗрдЯ рдкрд░ рдЗрд╕рдХреА рдЬрд╛рдВрдЪ рдХреА рдЧрдИ, рддреЛ рд╣рдореЗрдВ рднреЗрдЬреЗ рдЧрдП рдкреНрд░рд╢реНрди рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдкрд░ рдЙрдиреНрд╣реЗрдВ рдЕрдЬреАрдм рдкрд░рд┐рдгрд╛рдо рдорд┐рд▓ рд░рд╣реЗ рдереЗред
SQL
SELECT *FROM AccountsWHERE DATEDIFF(YEAR,ClosedDate,GETDATE())>=7
рдПрдХ рдкрд░реАрдХреНрд╖рдг рддрд╛рд▓рд┐рдХрд╛ рдмрдирд╛рдПрдВ
рдЕрдм рдпрд╣ рд╕рд╣реА рдорд╛рддреНрд░рд╛ рдХреА рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЖрдЧреЗ рдХреЗ рдирд┐рд░реАрдХреНрд╖рдг рдкрд░ рд╕рд╛рдд рд╕рд╛рд▓ рдкрд╣рд▓реЗ рдХреА рд╕реНрдерд┐рд░ рддрд╛рд░реАрдЦ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рдЦрд╛рддреЗ рдереЗ, рддреЛ рдЙрд╕рдиреЗ рдРрд╕рд╛ рдХреНрдпреЛрдВ рдХрд┐рдпрд╛?
рдореИрдВрдиреЗ рдЗрд╕рдХреА рдЬрд╛рдВрдЪ рдХреЗ рд▓рд┐рдП рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдмрдирд╛рдпрд╛ рд╣реИред
SQL
DECLARE @Records TABLE (RecordID INT,RecordClosed DATETIME)DECLARE @InsRecID INT = 1DECLARE @InsRecDate DATE=DATEADD(YEAR,-8,GETDATE())WHILE @InsRecDate INSERT INTO @Records SELECT @InsRecID,@InsRecDate SET @InsRecID = @InsRecID+1 SET @InsRecDate=DATEADD(DAY,1,@InsRecDate)ENDDECLARE @DateFrom DATE=DATEADD(YEAR,-7,GETDATE())SELECT MAX(RecordClosed) FROM @RecordsSELECT MAX(RecordClosed) FROM @Records WHERE DATEDIFF(YEAR,RecordClosed,getdate())>=7SELECT MAX(RecordClosed) FROM @Records WHERE RecordClosed<@DateFromSELECT MAX(RecordClosed) FROM @Records WHERE RecordClosed<=@DateFromSELECT MAX(RecordClosed) FROM @Records WHERE DATEDIFF(DAY,RecordClosed,getdate())/365.25>7
рдкрд░рд┐рдХреНрд╖рдг
Results
2007-03-21 00:00:00.000
2006-12-31 00:00:00.000
2006-03-20 00:00:00.000
2006-03-21 00:00:00.000
2006-03-21 00:00:00.000
рдХреНрдпрд╛ рд╕рд╣реА рд╣реИ?
рдкрд╣рд▓рд╛ рд░рд┐рдХреЙрд░реНрдб рдЕрд╕реНрдерд╛рдпреА рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рд╕рдмрд╕реЗ рдмрдбрд╝реА рддрд╛рд░реАрдЦ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдареАрдХ рд╣реИред
рджреВрд╕рд░реЗ рд░рд┐рдХреЙрд░реНрдб рдиреЗ 2006 рдХреЗ рдЕрдВрдд рддрдХ рд╕рднреА рдЦрд╛рддреЛрдВ рдХреЛ рдЙрдард╛ рд▓рд┐рдпрд╛ рд╣реИ, рдпрд╣ рдПрдХ рд╕рдВрднрд╛рд╡рд┐рдд рдореБрджреНрджрд╛ рд╣реЛ рд╕рдХрддрд╛ рдерд╛ рдХреНрдпреЛрдВрдХрд┐ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдбреЗрдЯрд╛ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реЛрддрд╛ред рд╡рд░реНрд╖ рдкрд░ DATEDIFF рд╡рд┐рд╢реБрджреНрдз рд░реВрдк рд╕реЗ рд╡рд░реНрд╖ 7 рд╕рд╛рд▓ рдкрд╣рд▓реЗ рдХреА рдЬрд╛рдБрдЪ рдХрд░ рд░рд╣рд╛ рд╣реИред
рддреАрд╕рд░рд╛ рдФрд░ рдЪреМрдерд╛ рд░рд┐рдХреЙрд░реНрдб рд╡рд╣ рд╣реИ рдЬреЛ рд╣рдо рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЗрд╕ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЖрдк рд╕рд╛рдд рд╕рд╛рд▓ рдкрд╣рд▓реЗ рдХреЗ рджрд┐рди рдХреЛ рдЕрдВрджрд░ рдпрд╛ рдмрд╛рд╣рд░ рдХреЗ рд░реВрдк рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВредрдкрд╛рдВрдЪрд╡рд╛рдВ рд░рд┐рдХреЙрд░реНрдб, рд╣рд╛рд▓рд╛рдВрдХрд┐ рд░рди рдХрд░рддреЗ рд╕рдордп рд╕рд╣реА рд╣реИ, рд▓реАрдк рд╡рд░реНрд╖ рдХреА рдЧрдгрдирд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реИ, рдФрд░ рдпрджрд┐ рдЖрдкрдХреЛ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╣реЛрдирд╛ рд╣реИ рддреЛ рд╕рдЯреАрдХрддрд╛ рдХреЗ рд▓рд┐рдП рднрд░реЛрд╕рд╛ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
Speed difference
While checking the records, I ran it on the system checking 2,500,000 records for 3 and 5 above.
Statement 5 returned our result in 6 seconds, Statement 3 in only 3 seconds, so not only were we now sure that we were accurate, but we were also processing the records quicker.
Try to use a proper date when querying dates, hope this helps someone scratching their head.