第一次堆栈溢出。
我只需要使用SQL查找没有重复的序列。
如果我的数据是(https://i.stack.imgur.com/ZP6Iw.jpg)
System | date | hour
---------+------+-------
Word | 28/8 | 16:00
Word | 28/8 | 16:01
Excel | 28/8 | 16:02
Word | 28/8 | 16:03
Ppt | 28/8 | 16:04
Ppt | 28/8 | 16:05
然后,我的输出将是我使用的系统,但是如果我多次使用一个系统而没有“中间”另一个系统,则该系统将被写入一次。这不是常规的“删除重复项”问题。只有当两个相同的系统一个接一个地出现时,这些副本才是重复的。
(https://i.stack.imgur.com/iG7Cn.jpg)
System | date
--------+-------
Word | 28/8
Excel | 28/8
Word | 28/8
Ppt | 28/8
我在限于'while'之类的地方使用presto。
非常感谢您!
答案 0 :(得分:0)
由于我无法根据预先测试进行测试,所以我不知道这是否真的有效。
因此,这只是一些标准SQL,它使用LAG窗口函数在同一日期过滤出相同的以下“系统”。
SELECT q.System, q.date
FROM
(
SELECT
t.System,
t.date,
t.hour,
LAG(t.System) OVER (PARTITION BY t.date ORDER BY t.hour ASC) AS prevSystem
FROM YourTable t
) AS q
WHERE (q.System != q.prevSystem OR q.prevSystem IS NULL)
ORDER BY q.date, q.hour
答案 1 :(得分:0)
这是一个孤岛问题。您想对属于同一System
的连续记录进行分组。
您可以使用窗口功能(已在预存中使用)解决该问题:
select min(system) system, min(date) date, count(*) nb_records
from (
select
t.*,
row_number() over(order by date, hour) rn1,
row_number() over(partition by system order by date, hour) rn2
from mytable t
) t
group by rn1 - rn2
order by min(rn1)
我强烈建议您将列date
和time
合并到相关日期/时间数据类型中的唯一列。将这些信息分为两列会使使用起来更加复杂。
在 this Db Fiddle 中包含示例数据,查询返回:
system | date | nb_records :----- | :------------------ | ---------: Word | 28/08/2019 00:00:00 | 2 Excel | 28/08/2019 00:00:00 | 1 Word | 28/08/2019 00:00:00 | 1 Ppt | 28/08/2019 00:00:00 | 2