5

我有以下要过滤的数据,因此我仅根据第一列的分组得到一行并选择最大日期

co2 包含唯一值

col1 | col2 | date

 1   |  123 | 2013
 1   |  124 | 2012
 1   |  125 | 2014
 2   |  213 | 2011
 2   |  214 | 2015
 2   |  215 | 2018

所以我想要的结果是:

 1   |  125 | 2014
 2   |  215 | 2018

我尝试使用我在这里找到的一些示例(如下)以及其他 group by / distinct / max(date) 但没有运气

select t.*
from (select t.*,
             row_number() over (partition by col1, col2 order by date desc) as seqnum
      from t
     ) t
where seqnum = 1
4

3 回答 3

3

将分区更改row_number()为仅分区,col1但保持顺序date desc

select col1, col2, date
from 
(
  select col1, col2, date,
    row_number() over (partition by col1 
                       order by date desc) as rn
  from yourtable
) x
where rn = 1

请参阅SQL Fiddle with Demo

由于您同时进行了分区,col1并且col2您获得了每一行的唯一值。所以它不会返回具有最大日期的行。

于 2013-04-04T21:14:42.557 回答
0

我更喜欢 bluefeet 的方法,但这里是使用 MAX 的等效方法:

SELECT t.col1, t.col2, t.date
FROM yourtable t
    JOIN (
        SELECT col1, MAX(date) maxDate
        FROM yourtable
        GROUP BY col1
    ) t2 on t.col1 = t2.col1 AND t.date = t2.maxDate

SQL Fiddle Demo(借自其他帖子)

于 2013-04-04T21:21:43.477 回答
0
    Select * from yourtable where date in 
(select max(date) from tab group by col1);
于 2013-04-05T05:19:42.643 回答