根据特定条件获取不同时间戳之间的时间
Get the time between different timestamps based on a particular condition
我有这个table:
user_id | status | timestamp
--------+---------+--------------------
null | null | 2022-05-05 01:01:00
null | null | 2022-05-05 01:02:00
7461 | null | 2022-05-05 01:03:00
null | open | 2022-05-05 01:04:00
null | null | 2022-05-05 01:05:00
null | on hold | 2022-05-05 01:06:00
8474 | null | 2022-05-05 01:07:00
null | null | 2022-05-05 01:08:00
null | solved | 2022-05-05 01:09:00
我需要找出从分配 user_id 到第一次状态更改之间的时间差。另外,如果在分配下一个用户之前状态没有变化,那么我需要找到从分配第一个 user_id 到分配下一个 user_id 的时间差。
我正在寻找的输出是
user_id | timestamp
--------+----------
7461 | 00:01:00
8474 | 00:02:00
可以使用 CTE 吗?用需要的数据制作一个单独的 table 并计算差异?任何帮助将不胜感激。
with data as (
select *,
count(user_id) over (order by timestamp) as grp,
lead(timestamp) over (order by timestamp) as next_ts
from T
)
select
min(user_id) as user_id,
min(timestamp) as start_time,
coalesce(
min(case when status is not null then timestamp end),
max(next_ts)
) as end_time
from data
group by grp
您的数据似乎没有显示无状态案例的示例 change/update。然后还不清楚您希望如何处理到达数据末尾时发生的情况。
由于我无法访问 Snowflake,我会让您处理计算和显示两个时间之间差异的问题。
https://dbfiddle.uk/?rdbms=postgres_10&fiddle=e6354448c6142d0493141b4d67477f73
我有这个table:
user_id | status | timestamp
--------+---------+--------------------
null | null | 2022-05-05 01:01:00
null | null | 2022-05-05 01:02:00
7461 | null | 2022-05-05 01:03:00
null | open | 2022-05-05 01:04:00
null | null | 2022-05-05 01:05:00
null | on hold | 2022-05-05 01:06:00
8474 | null | 2022-05-05 01:07:00
null | null | 2022-05-05 01:08:00
null | solved | 2022-05-05 01:09:00
我需要找出从分配 user_id 到第一次状态更改之间的时间差。另外,如果在分配下一个用户之前状态没有变化,那么我需要找到从分配第一个 user_id 到分配下一个 user_id 的时间差。
我正在寻找的输出是
user_id | timestamp
--------+----------
7461 | 00:01:00
8474 | 00:02:00
可以使用 CTE 吗?用需要的数据制作一个单独的 table 并计算差异?任何帮助将不胜感激。
with data as (
select *,
count(user_id) over (order by timestamp) as grp,
lead(timestamp) over (order by timestamp) as next_ts
from T
)
select
min(user_id) as user_id,
min(timestamp) as start_time,
coalesce(
min(case when status is not null then timestamp end),
max(next_ts)
) as end_time
from data
group by grp
您的数据似乎没有显示无状态案例的示例 change/update。然后还不清楚您希望如何处理到达数据末尾时发生的情况。
由于我无法访问 Snowflake,我会让您处理计算和显示两个时间之间差异的问题。
https://dbfiddle.uk/?rdbms=postgres_10&fiddle=e6354448c6142d0493141b4d67477f73