获取群组的最新记录

时间:2012-03-26 16:16:17

标签: sql sql-server-2008 tsql group-by

我正在尝试在进行内部联接后找到一个组的最新记录。

说我有以下两个表:

dateCreated | id
2011-12-27  | 1
2011-12-15  | 2
2011-12-17  | 6
2011-12-26  | 15
2011-12-15  | 18
2011-12-07  | 22
2011-12-09  | 23
2011-12-27  | 24


  code      | id
    EFG     | 1
    ABC     | 2
    BCD     | 6
    BCD     | 15
    ABC     | 18
    BCD     | 22
    EFG     | 23
    EFG     | 24

我想只显示最新的分组:

结果将是:

dateCreated | code
2011-12-27  | EFG
2011-12-15  | ABC
2011-12-26  | BCD

我知道这可以使用maxgroup by函数来实现,但我似乎无法获得所需的结果。

3 个答案:

答案 0 :(得分:3)

我认为这应该会让你到那里:

select max(a.dateCreated) as dateCreated
    , b.code
from table1 a
    join table2 b on a.id = b.id
group by b.code

答案 1 :(得分:0)

假设您的表名为ab,请尝试以下操作:

select max(a.dateCreated) as dateCreated, b.code
from a join b on a.id = b.id
group by b.code

答案 2 :(得分:0)

您可以使用分析功能。这样,您仍然只为每个代码选择一个结果,即使它们是两个具有相同的最后一个dateCreated(这可能是您实际想要的结果也可能不是这样)

SELECT Code, dateCreated
FROM (  SELECT T2.Code, T1.dateCreated, ROW_NUMBER() OVER(PARTITION BY T2.Code ORDER BY T1.dateCreated DESC) Corr
        FROM Table1 T1
        INNER JOIN Table2 T2
        ON T1.id = T2.id) A
WHERE Corr = 1