Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 按列和最大日期分组时如何选择单行?_Sql_Oracle - Fatal编程技术网

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);