0- 描述
描述:时间序列–取多个字段最新的值
表名:t19
表字段及内容:
date_id a b c
2014 AB 12 bc
2015 23
2016 d
2017 BC
1- 问题一
描述:如何一并取出最新日期
输出结果如下所示:
date_a a date_b b date_c c
2017 BC 2015 23 2016 d
参考答案
SELECT max(CASE WHEN rn_a = 1 THEN date_id else 0 END) AS date_a
,max(CASE WHEN rn_a = 1 THEN a else null END) AS a
,max(CASE WHEN rn_b = 1 THEN date_id else 0 END) AS date_b
,max(CASE WHEN rn_b = 1 THEN b else NULL END) AS b
,max(CASE WHEN rn_c = 1 THEN date_id else 0 END) AS date_c
,max(CASE WHEN rn_c = 1 THEN c else null END) AS c
FROM (
SELECT date_id
,a
,b
,c
--对每列上不为null的值 的 日期 进行排序
,row_number()OVER( PARTITION BY 1 ORDER BY CASE WHEN a IS NULL THEN 0 ELSE date_id END DESC) AS rn_a
,row_number()OVER(PARTITION BY 1 ORDER BY CASE WHEN b IS NULL THEN 0 ELSE date_id END DESC) AS rn_b
,row_number()OVER(PARTITION BY 1 ORDER BY CASE WHEN c IS NULL THEN 0 ELSE date_id END DESC) AS rn_c
FROM t19
) t
WHERE t.rn_a = 1
OR t.rn_b = 1
OR t.rn_c = 1;