【问题标题】:Querying amount of time level spent out of range查询超出范围的时间级别
【发布时间】:2013-05-16 14:14:00
【问题描述】:

我有一张表格,上面记录了坦克的时间和液位。

12:00 | 85

12:01 | 77

12:02 | 78

12:03 | 82

12:05 | 79

12:06 | 75

12:07 | 85

等等

您如何编写查询来获取油箱在一天中低于 80 的时间? 我正在使用 sql server 2008

【问题讨论】:

  • 第一列的类型是什么?
  • 需要更详细的信息才能得到真正正确的答案,但它的外观,如果一行代表一分钟,并且您总是每分钟采样一次,作为一种捷径,您就不能数数因为 1 行 = 1 分钟,所以级别

标签: sql time limits aggregates


【解决方案1】:

为了做到这一点,你需要下一次。一些数据库有lead()lag() 函数。我将使用相关子查询来执行此操作——一种更通用的方法。

select sum(endTime - Time)
from (select t.*,
             (select min(time) from t t2 where t2.time > t.time
             ) as endTime
      from t
     ) t
where level < 80;

一个警告:日期和时间函数因数据库而异,因此第一种语法不一定有效。例如,在 SQL Server 中,它可能是:

select sum(datediff(ms, Time, endTime))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-12-22
    • 1970-01-01
    • 2021-08-17
    • 2015-06-06
    • 2021-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多