获取最近的测量值

问题描述 投票:0回答:3

我有一个表,其中包含一些度量,ID和日期。

表的构建如下

ID     DATE    M1    M2
1      2020     1    NULL
1      2020    NULL   15
1      2018     2    NULL
2      2019     1    NULL
2      2019    NULL   1

我希望得到一个表,该表的每个ID的最新测量值都为一行

ID M1 M2
1  1  15
2  1   1

有什么想法吗?

sql greatest-n-per-group
3个回答
0
投票

您可以使用correlated子查询进行聚合:

select id, max(m1), max(m2)
from t 
where t.date = (select max(t1.date) from t t1 where t1.id = t.id)
group by id;

0
投票

[结合使用ROW_NUMBER和汇总:

WITH cte AS (
    SELECT *, ROW_NUMBER() OVER (PARTITION BY ID ORDER BY DATE DESC) rn
    FROM yourTable
)

SELECT ID, MAX(M1) AS M1, MAX(M2) AS M2
FROM cte
WHERE rn = 1
GROUP BY ID;

行号使我们限制为仅具有最近年份日期的每个ID的记录。然后,我们合计找到M1M2的最大值。


0
投票

在标准SQL中,您可以使用lag(ignore nulls)

select id, coalesce(m1, prev_m1), coalesce(m2, prev_m2)
from (select t.*, 
             lag(m1 ignore nulls) over (partition by id order by date) as prev_m1,
            lag(m2 ignore nulls) over (partition by id order by date) as prev_m2,
             row_number() over (partition by id order by date desc) as seqnum
      from t
     ) t
where seqnum = 1;
© www.soinside.com 2019 - 2024. All rights reserved.