获取最近的测量值
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
具有最近年份日期的记录。然后,我们聚合以找到 M1
和 M2
.
的最大值
在标准 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;
我有一个 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
具有最近年份日期的记录。然后,我们聚合以找到 M1
和 M2
.
在标准 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;