SQL-为每列值选择最大日期行

时间:2019-10-30 11:22:44

标签: sql

我有一个包含以下字段的表:

Risk|Date|Value
---------------
A|2019-04-23|3
A|2019-04-23|5
A|2019-06-12|4
A|2019-06-12|1
B|2019-05-22|7
B|2019-05-22|5
B|2019-03-13|4
C|2019-01-03|3

我想完成所有工作:它的日期值是该特定风险的所有日期值中的最大值。输出为:

Risk|Date|Value
---------------
A|2019-06-12|4
A|2019-06-12|1
B|2019-05-22|7
B|2019-05-22|5
C|2019-01-03|3

对于风险A,最大日期为2019-06-12。因此,所有带有该日期的行都将发送到输出。

对于风险B,最高日期为2019-05-22。因此,所有带有该日期的行都将发送到输出。

对于风险C,最大日期为2019-01-03。因此,所有带有该日期的行都将发送到输出。

有什么建议吗?

非常感谢您!

4 个答案:

答案 0 :(得分:3)

使用相关子查询

select t1.* from tbale t1
where t1.date=(select max(t2.date) from table t2 where t1.risk=t2.riks)

答案 1 :(得分:2)

where子句中进行过滤的简单方法:

select t.*
from t
where t.date = (select max(t2.date) from t t2 where t2.risk = t.risk);

答案 2 :(得分:2)

使用analytical/windowing function实现这一目标。语法因数据库而异,但是在Hive中,语法如下:

SELECT 
x.risk, x.date, x.value 
FROM (
    SELECT 
        risk, date, value,
        DENSE_RANK() OVER(PARTITION BY risk ORDER BY date DESC) AS risk_rank
    FROM 
        table_name
) x
WHERE x.risk_rank = 1;

答案 3 :(得分:0)

select Risk, date, value 
from
  (select *, dense_rank() over(partition by risk order by date desc) as K 
   from Max_date
  ) as T 
where K=1