Tuesday, August 17, 2010

T-SQL Escoger el mayor valor de un determinado campo



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