sql-server – 根据两个MAX值获取相关行

我碰到了一个用例,我想编写一个SQL查询来根据表的2 MAX值检索一行.我尝试了几种组合,但还没有运气.这是一个示例表和要求:

Index   cardCode    updateDate  updateTS    unitValue
1       sf-001      2018/1/1    1122        $12 
2       sf-001      2018/2/19   7788        $4 
3       sf-002      2018/1/2    2233        $56 
4       sf-003      2018/3/14   3344        $77 
5       sf-003      2018/3/14   4455        $51 
6       sf-003      2018/3/2    6677        $88 
7       sf-004      2018/11/11  8880        $73

SQL查询应返回每个cardCode具有MAX updateDate的行.例如.对于“sf-001”,它应返回第2行(unitValue为$4).如果它有两个或更多相同的updateDates,那么它应该检查MAX updateTS.例如.对于“sf-003”,它应返回第5行(unitValue为$51).因此查询应该导致以下输出:

Index   cardCode    updateDate  updateTS    unitValue
1       sf-001      2018/2/19   7788        $4 
2       sf-002      2018/1/2    2233        $56 
3       sf-003      2018/3/14   4455        $51 
4       sf-004      2018/11/11  8880        $73 
最佳答案
子查询/ CTE不需要:

SELECT TOP 1 WITH TIES *
FROM table_name
ORDER BY ROW_NUMBER() OVER(PARTITION BY cardCode 
                           ORDER BY updateDate DESC, updateTS DESC);

转载注明原文:sql-server – 根据两个MAX值获取相关行 - 代码日志