DISTINCT和GROUP BY与SQL Server

时间:2016-10-06 09:50:34

标签: sql-server group-by distinct

我有下表(sql server),我正在寻找一个查询来选择包含所有字段的最后两行:

  • created_at
  • 排序
  • 分组/不同 type_id

    
    id type_id some_value created_at 
    1  B       mk2        2016-10-01 00:00:00.000
    2  A       mbs        2016-10-01 10:02:39.077
    3  B       sa         2016-10-02 10:03:08.123
    4  A       xc         2016-10-02 10:03:28.777
    5  B       q1         2016-10-03 10:04:20.920
    6  A       tr         2016-10-03 10:04:48.533
    7  A       1a         2016-09-30 10:36:26.287
    

在MySQL中,这是一项简单的任务 - 但是 SQL Server 所有字段都必须包含在聚合函数或GROUP BY子句中。但这会导致不存在的字段组合。

有办法解决这个问题吗?

提前致谢!

1 个答案:

答案 0 :(得分:1)

<强>解决方案

基于Andrew Deighton的评论,我做到了这一点:

SELECT *
FROM (
       SELECT
         id,
         type_id,
         some_value,
         created_at,
         ROW_NUMBER()
         OVER (PARTITION BY type_id
           ORDER BY created_at DESC) AS row
       FROM test_sql
     ) AS ts
WHERE row = 1
ORDER BY row

结论:无需 GROUP BY DISTINCT