【问题标题】:how to use first_value with reset如何将 first_value 与重置一起使用
【发布时间】:2021-12-14 00:02:07
【问题描述】:
WITH t AS
(
    SELECT
        *
    FROM
        (VALUES ('2021-10-09 23:58:34.000', '2021-10-10 00:00:00.000', 'task_completed', '00001'),
                ('2021-10-10 00:00:01.000', '2021-10-10 00:00:05.000', 'task_completed', '00001'),
                ('2021-10-10 00:00:06.000', '2021-10-10 00:00:25.000',  'task_completed', '00001'),
                ('2021-10-10 00:00:26.000', '2021-10-10 00:00:45.000', 'task_not_completed', '00001'),
                ('2021-10-10 00:00:46.000', '2021-10-10 00:01:00.000', 'task_not_completed', '00001'),
                ('2021-10-10 00:01:01.000', '2021-10-10 00:01:10.000', 'task_completed', '00001'),
                ('2021-10-10 00:01:11.000', '2021-10-10 00:01:15.000', 'task_completed', '00001')) AS t(start_time, end_time, task_state, person_id)
    ORDER BY 
        1
)
SELECT * 
FROM t

我正在尝试获得如下所示的聚合结果:

start_time end_time task_state
'2021-10-09 23:58:34.000 2021-10-10 00:00:25.000' task_completed
'2021-10-10 00:00:26.000 2021-10-10 00:01:00.000' task_not_completed
'2021-10-10 00:01:01.000 2021-10-10 00:01:15.000' task_completed

我曾尝试使用 first_value 函数,但它似乎只是为所有 task_state 赋予值“2021-10-09 23:58:34.000”。

不知道我做错了什么。这是我尝试过的:

SELECT
    start_time,  
    FIRST_VALUE(start_time) OVER (ORDER BY start_time) AS end_time, 
    MIN(task_state) OVER (ORDER BY start_time) AS state
FROM
    t

为此寻求帮助

【问题讨论】:

  • 标记你的数据库
  • 请澄清您的具体问题或提供其他详细信息以准确突出您的需求。正如目前所写的那样,很难准确地说出你在问什么。
  • 感谢 eshirvana 的回复。它看起来接近我想要的更多调整。我基本上是在尝试获取用户启动任务、结束任务并再次启动它的时间间隔范围。我希望它的格式与我在上表中显示的方式相同。我希望这能澄清我的问题

标签: sql aggregate-functions window-functions


【解决方案1】:

这是一个gaps & island 问题:

SELECT person_id, task_state, MIN(start_time) start_time, MAX(end_time) end_time  
from (
   SELECT * 
       , ROW_NUMBER() OVER (PARTITION BY t.person_id ORDER BY start_time)
       - ROW_NUMBER() OVER (PARTITION BY t.person_id, t.task_state ORDER BY start_time) AS taskgroups
   FROM t
) tt GROUP BY taskgroups, person_id, task_state

db小提琴here

【讨论】:

  • 非常感谢eshirvana!!!这实际上解决了我的问题。直到现在我才听说过缝隙和孤岛问题。
  • @emma_floyd 欢迎您,如果这回答了您的问题,请接受投票
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-10
  • 2019-06-08
  • 2012-02-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多