我有以下数据我想过滤,所以我只根据第一列的分组得到一行并选择最大日期
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
我尝试过使用我在这里找到的一些例子(如下所示)以及/ distinct / max(日期)的其他组,但没有运气
select t.*
from (select t.*,
row_number() over (partition by col1, col2 order by date desc) as seqnum
from t
) t
where seqnum = 1
答案 0 :(得分: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
由于您要同时按col1
和col2
进行分区,因此每行都会获得唯一值。因此它不会返回具有最大日期的行。
答案 1 :(得分: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(借鉴其他帖子)
答案 2 :(得分:0)
Select * from yourtable where date in
(select max(date) from tab group by col1);