在 SQL 中执行不同操作,按另一列排序

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

假设我有一张这样的桌子:

第 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。

sql presto
1个回答
0
投票

这是一个

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

小提琴

© www.soinside.com 2019 - 2024. All rights reserved.