DECLARE @TestTable TABLE (id INT, home INT, date DATETIME,
player VARCHAR(20), resource INT)
INSERT INTO @TestTable
SELECT 1, 10, '20090304', 'john', 399 UNION
SELECT 2, 11, '20090304', 'juliet', 244 UNION
SELECT 5, 12, '20090304', 'borat', 555 UNION
SELECT 3, 10, '20090303', 'john', 300 UNION
SELECT 4, 11, '20090303', 'juliet', 200 UNION
SELECT 6, 12, '20090303', 'borat', 500 UNION
SELECT 7, 13, '20081224', 'borat', 600 UNION
SELECT 8, 13, '20090101', 'borat', 700
-- Answer
SELECT id, home, date, player, resource
FROM (SELECT id, home, date, player, resource,
RANK() OVER (PARTITION BY home ORDER BY date DESC) N
FROM @TestTable
)M WHERE N = 1
-- and if you really want only home with max date
SELECT T.id, T.home, T.date, T.player, T.resource
FROM @TestTable T
INNER JOIN
( SELECT TI.id, TI.home, TI.date,
RANK() OVER (PARTITION BY TI.home ORDER BY TI.date) N
FROM @TestTable TI
WHERE TI.date IN (SELECT MAX(TM.date) FROM @TestTable TM)
)TJ ON TJ.N = 1 AND T.id = TJ.id
No comments:
Post a Comment