Sql 按列和最大日期分组时如何选择单行?
我有下面的数据,我想过滤,所以我只得到一个基于第一列分组的行,并选择最大日期 二氧化碳含有独特的价值Sql 按列和最大日期分组时如何选择单行?,sql,oracle,Sql,Oracle,我有下面的数据,我想过滤,所以我只得到一个基于第一列分组的行,并选择最大日期 二氧化碳含有独特的价值 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 我尝试使用了一些例子,我在这
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
我尝试使用了一些例子,我在这里(如下)找到了这些例子,还有其他的groupby/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
将
行_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
进行分区,因此每一行的值都是唯一的。因此它不会返回包含max日期的行。我更喜欢BlueFoot的方法,但这里有一个使用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
(从其他帖子中借用)@Bluefeel它说在上一篇文章中非法使用长数据类型line@Stan我不确定我是否理解这个错误。你从哪里得到的错误?这是一个正在运行的Oracle演示--。什么版本的Oracle?您表上的数据类型是什么?@Bluefeet,实际上它看起来不错,不知道我第一次运行它时为什么出错。重新开始,看起来还不错
Select * from yourtable where date in
(select max(date) from tab group by col1);