我在这里面临一个问题(使用SQL Server 2005)。
我的SELECT
查询如下所示:
SELECT
a.str_column1, b.str_column2, c.date_column3, c.guid_column4
FROM table
....
joining the other tables here to get my columns
....
GROUP BY
a.str_column1, b.str_column2, c.date_column3, c.guid_column4
这将是这样的
a.str_column1 b.str_column2 c.date_column3 c.guid_column4
------------------------------------------------------------------
a1 b1 15/07/2013 someID
a2 b2 05/06/2012 someID
a1 b1 07/08/2013 someID
....
现在我希望它按a.str_column1
和b.str_column2
分组,只获取最新的order by c.dat_column3
a.str_column1 b.str_column2 c.date_column3 c.guid_column4
------------------------------------------------------------------
a1 b1 07/08/2013 someID
a2 b2 05/06/2012 someID
知道如何用SQL实现这个目标吗?
答案 0 :(得分:4)
您可以使用ROW_NUMBER()
,也可以完全取消GROUP BY
:
SELECT
*
FROM (
SELECT
a.str_column1, b.str_column2, c.date_column3, c.guid_column4,
ROW_NUMBER() OVER (PARTITION BY a.str_column1, b.str_column2
ORDER BY c.date_column3 DESC) as rn
FROM table
....
joining the other tables here to get my columns
....
--No longer needed GROUP BY a.str_column1, b.str_column2, c.date_column3, c.guid_column4
) t
WHERE t.rn = 1
为了能够查询ROW_NUMBER()
函数的结果,您必须将现有查询(使用SELECT
列表中的新列)放入子查询中(如上所述)或公用表表达式。
答案 1 :(得分:1)
您应该对max
列使用date_column3
函数,并从group by子句中删除该列,如下所示
SELECT
a.str_column1, b.str_column2, max(c.date_column3) as column3, c.guid_column4
FROM table
....
joining the other tables here to get my columns
....
GROUP BY a.str_column1, b.str_column2,c.guid_column4