1

我在这里遇到了一个问题(使用 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_column1and分组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 完成此任务吗?

4

2 回答 2

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)放入子查询(如上)或公用表表达式中。

于 2013-08-07T07:40:16.597 回答
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
于 2013-08-07T07:37:18.210 回答