Reputation: 165
I have a SQL statement.
SELECT ID, LOCATION, CODE,MAX(DATE) FROM TABLE1 WHERE
DATE <= CONVERT(DATETIME,'11-11-2012') AND
EXISTS(SELECT * FROM #TEMP_CODE WHERE TABLE1.CODE =#TEMP_CODE.CODE)
AND ID IN (14,279)
GROUP BY ID, LOCATION, CODE,(DATE)
I need rows with the nearest date to the 11-11-2012, but the table returns all the values. What am I doing wrong. Thanks
ID LOCATION CODE DATE
-------------------------------------------------------------------
14 CAR STREET,UDUPI 234 2012-08-08 00:00:00.000
14 CAR STREET,UDUPI 234 2012-08-10 00:00:00.000
14 CAR STREET,UDUPI 234 2012-08-14 00:00:00.000
279 MADHUGIRI 234 2012-08-08 00:00:00.000
279 MADHUGIRI 234 2012-08-11 00:00:00.000
I need to select the row with the max date. The required result is
ID LOCATION CODE DATE
-------------------------------------------------------------------
14 CAR STREET,UDUPI 234 2012-08-10 00:00:00.000
279 MADHUGIRI 234 2012-08-11 00:00:00.000
Upvotes: 0
Views: 318
Reputation: 32602
No need to use Group by (Date)
. Try this:
SELECT ID, LOCATION, CODE,MAX(DATE) FROM TABLE1
WHERE DATE <= CONVERT(DATETIME,'11-11-2012') AND
EXISTS(SELECT * FROM #TEMP_CODE WHERE TABLE1.CODE =#TEMP_CODE.CODE)
AND ID IN (14,279)
GROUP BY ID, LOCATION, CODE
Upvotes: 0
Reputation: 13700
Try using unambigious date format
SELECT ID, LOCATION, CODE,MAX(DATE) FROM TABLE1
WHERE DATE <= '20121111' AND
EXISTS(SELECT * FROM #TEMP_CODE WHERETABLE1.CODE =#TEMP_CODE.CODE)
AND ID IN ('KBL01005','KBL05020')
GROUP BY ID, LOCATION, CODE
Also see why you need to use unambigious date formats http://beyondrelational.com/modules/2/blogs/70/posts/10898/understanding-datetime-column-part-ii.aspx
Upvotes: 1
Reputation: 166396
Remove (DATE)
from the GROUP BY
Clause.
Change
SELECT ID, LOCATION, CODE,MAX(DATE) FROM TABLE1 WHERE
DATE <= CONVERT(DATETIME,'11-11-2012') AND
EXISTS(SELECT * FROM #TEMP_CODE WHERETABLE1.CODE =#TEMP_CODE.CODE)
AND ID IN ('KBL01005','KBL05020')
GROUP BY ID, LOCATION, CODE,(DATE)
to
SELECT ID, LOCATION, CODE,MAX(DATE) FROM TABLE1 WHERE
DATE <= CONVERT(DATETIME,'11-11-2012') AND
EXISTS(SELECT * FROM #TEMP_CODE WHERETABLE1.CODE =#TEMP_CODE.CODE)
AND ID IN ('KBL01005','KBL05020')
GROUP BY ID, LOCATION, CODE
Upvotes: 3