我有下表(sql server),我正在寻找一个查询来选择包含所有字段的最后两行:
分组/不同 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子句中。但这会导致不存在的字段组合。
有办法解决这个问题吗?
提前致谢!
答案 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 。