【问题标题】:SQL: Querying between multiple sets of values?SQL:在多组值之间进行查询?
【发布时间】:2021-03-11 04:18:29
【问题描述】:

努力解决这个问题,可能是因为我不确定如何将其作为问题进行搜索。

我有一个包含名称、start_time 和 end_time 列的表。我想计算两个日期之间发生的所有条目的 end_time - start_time 的总和,即。 start_time 在指定开始之后,end_time 在指定结束之前。我知道如何为一组做到这一点:

    SELECT name, SUM(end_time-start_time) AS time FROM table WHERE start_time >= ? AND end_time <= ?, (start, end)

虽然我有四组开始和结束,但理想情况下,我希望在一个查询中完成所有这些操作,这样我就不必在 Python 中附加内容。所以这种形式的输出:

    name, sum(end_time-start_time) between start1 and end1, sum(end_time-start_time) between start2 and end2...ETC

我真的不明白多个开始和结束如何适合查询。能做到吗?

【问题讨论】:

  • 发布样本数据和预期结果以澄清。

标签: sql sqlite


【解决方案1】:

在 SQLite 中,您可以通过以下方式获得 2 个日期时间的差异:

strftime('%s', end_time) - strftime('%s', start_time)

因为函数:

strftime('%s', some_datetime_column) 

返回自 1970-01-01 以来的秒数。

在您的情况下,您可以对所有 4 组开始和结束日期使用条件聚合,如下所示:

select name,
       sum(case when start_time >= ? AND end_time <= ? then strftime('%s', end_time) - strftime('%s', start_time) else 0 end) total1,
       sum(case when start_time >= ? AND end_time <= ? then strftime('%s', end_time) - strftime('%s', start_time) else 0 end) total2,
       sum(case when start_time >= ? AND end_time <= ? then strftime('%s', end_time) - strftime('%s', start_time) else 0 end) total3,
       sum(case when start_time >= ? AND end_time <= ? then strftime('%s', end_time) - strftime('%s', start_time) else 0 end) total4
from tablename
group by name

【讨论】:

  • 正是我想要的。谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-03-12
  • 2020-04-24
  • 2017-03-13
  • 2023-04-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多