假设我有一张这样的桌子:
第 1 栏 | 时间戳 |
---|---|
a | 1 |
a | 2 |
a | 3 |
b | 4 |
b | 5 |
a | 6 |
a | 7 |
我需要这样的查询输出:
第 1 栏 | 时间戳 |
---|---|
a | 1 |
b | 4 |
a | 6 |
即,我只需要跟踪列中的更改以及它的最小时间戳,但我无法想出一种方法来做到这一点。建议我可以帮助我做到这一点的最佳查询。由于数据量巨大,请尽量将 CTE/子查询保持在最低限度。谢谢。我使用的 SQL 是 PrestoSQL。
这是一个
gap & island
问题。您可以这样做:
with cte as
(
select *
, row_number() over (order by timestamp) -
row_number() over (partition by column1 order by timestamp) as grp
from my_table
)
select column1, min(timestamp) as timestamp
from cte
group by column1, grp
order by column1, grp
输出:
第1栏 | 时间戳 |
---|---|
b | 4 |
a | 1 |
a | 6 |