我有一个包含以下字段的表:
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。因此,所有带有该日期的行都将发送到输出。
有什么建议吗?
非常感谢您!
答案 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