获取最近的测量值

Get most recent measurement

我有一个 table 有一些尺寸、ID 和日期。

table 是这样构建的

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

我想以一个 table 结束,每个 ID 一行包含最近的测量值

ID M1 M2
1  1  15
2  1   1

有什么想法吗?

您可以使用 相关 聚合子查询:

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;

使用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.

的最大值

在标准 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;