获取特定时间范围内的数值,并排除SQL中的(大量)空白。

我想获取两个日期之间的时间范围内的值,并排除这两个日期之间的空白处的一些值。我的查询在有少量空白的情况下效果很好,但是,有时我必须排除大量的空白,这样我的查询就超过了最大字符量。现在,我正在连接 EXCEPT 查询我想排除的每个时间间隔。我相信有一些更聪明的方法可以做到这一点,但我对SQL不是很熟悉。

我正在使用pandas read_sql() 并将参数与 params 参数,在例子中我写下了可读值。

SELECT sv.Timestamp,
       sv.SignalID,
       s.SignalName,
       sv.Value
FROM SignalValue sv
       INNER JOIN Signal s ON s.SignalID = sv.SignalID
       INNER JOIN Device r ON r.DeviceID = s.DeviceID
WHERE  s.SignalName = Sensor1 AND r.DeviceId = 1 AND sv.timestamp >= '2019-02-04 00:00:00.000000' AND sv.timestamp <= '2019-02-11 23:59:59.999999'

EXCEPT SELECT sv.Timestamp,
              sv.SignalID,
              s.SignalName,
              sv.Value
FROM SignalValue sv
       INNER JOIN Signal s ON s.SignalID = sv.SignalID
       INNER JOIN Device r ON r.DeviceID = s.DeviceID
WHERE s.SignalName = Sensor1  AND r.DeviceId = 1 AND sv.timestamp BETWEEN '2019-02-04 05:15:20.099000' AND '2019-02-04 09:15:20.099000'

EXCEPT SELECT sv.Timestamp,
              .....

我怎样才能在一个较短的查询中做到排除?

解决方案:

只保留第一个选择,并在最后添加排除项。

... AND sv.timestamp >= '2019-02-04 00:00:00.000000' AND sv.timestamp <= '2019-02-11 23:59:59.999999'
AND sv.timestamp NOT BETWEEN '2019-02-04 05:15:20.099000' AND '2019-02-04 09:15:20.099000'
...

如果你能把你的排除区间存储在一个单独的表中,将实现一个更优雅的解决方案。或者如果你不能做到这一点,使用CTE(Common Table Expression)创建一个虚拟表。

如果你能做到这一点,并将其存储在一个结构中,如

-- ExclusionIntervals (start datetime, end datetime)

你可以用

SELECT sv.Timestamp,
       sv.SignalID,
       s.SignalName,
       sv.Value
FROM SignalValue sv
       INNER JOIN Signal s ON s.SignalID = sv.SignalID
       INNER JOIN Device r ON r.DeviceID = s.DeviceID
       LEFT JOIN ExclusionIntervals ei ON ei.start <= sv.Timestamp AND ei.end >= sv.Timestamp 
WHERE  s.SignalName = Sensor1 AND r.DeviceId = 1 AND sv.timestamp >= '2019-02-04 00:00:00.000000' AND sv.timestamp <= '2019-02-11 23:59:59.999999'
AND ei.start is null

给TA打赏
共{{data.count}}人
人已打赏
未分类

需要帮助在谷歌应用程序脚本中插入内联图片。

2022-9-8 19:37:17

未分类

如何在饼图中使用Matplotlib改变颜色?

2022-9-8 19:37:19

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索