【问题标题】:State transition - time taken.- SQL状态转换 - 花费时间。- SQL
【发布时间】:2021-12-25 08:13:46
【问题描述】:

在给定一系列值转换的情况下,我试图找出每个状态所花费的总时间。这是一个例子:

输入:

Time State
10:00:00 A
10:00:01 A
10:00:02 B
10:00:03 B
10:00:05 A
10:00:07 B
10:00:08 A
10:00:09 B
10:00:20 A
10:00:21 B

输出:

state time_taken_seconds
A 6
B 15

我无法在 SQL 中使用该功能。非常感谢您的帮助。

【问题讨论】:

  • 请标记您正在使用的数据库。
  • 这用于 Presto 查询。
  • 如何计算差异?我看到状态 A 从 10:00:00 开始,到 10:00:20 结束。这应该是20秒吧?将 6 秒作为您的预期输出的原因是什么?
  • @Arun 是在特定状态下花费的时间。如果看到输入表,在状态 A 总共是 6 秒。

标签: sql state presto


【解决方案1】:

您可以使用分析函数lead()来参考下一行的时间。

select state, sum(lap) from (
    select
        time,
        state, 
        lead(time) over(order by time) - time as lap 
    from tablenane
)
group by state

【讨论】:

  • 你能评论一下为什么它在窗口函数中是按时间排序的吗?
  • lead(x) 按时间从下一行中取出 x 值
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-10-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-01
相关资源
最近更新 更多