【问题标题】:How to split a timestamp from 15 Minutes into 3 parts like every 5 minutes via SQL如何通过 SQL 将 15 分钟的时间戳分成 3 个部分,例如每 5 分钟一次
【发布时间】:2022-12-16 07:18:06
【问题描述】:

我有一个非常容易正常处理的数据库。该数据集有开始时间、结束时间、模型编号、房间编号。 所以我做了一个 SQL,它向我显示了每个模型在房间里的时间。 但我需要的是一张表格,每 5 分钟向我显示一个新列,显示模型是否在这个房间里。为了更好地理解:

第一条 SQL: 样板房开始时间结束时间

  • 217 5 31.10.2022 10:05:00 31.10.2022 10:17:00

第二个 SQL: 样板房duration_time

  • 217 5 00:12:00

需要的 SQL: 样板房时间

  • 217 5 31.10.2022 10:05:00
  • 217 5 31.10.2022 10:10:00
  • 217 5 31.10.2022.10:15:00

我用 trunc 写了一些不同的函数,但没有一个起作用。也许有人对我写下的示例有想法,如何获得我想要的结果。 请善待,我正在开始这个..

所以这是我获取持续时间的第二个 SQL:

选择(to_timestamp(end_time)-to_timestamp(start_time))作为持续时间,模型,房间 从对象

【问题讨论】:

  • 你使用哪个rdbms?你能提供一个样本表吗?
  • rdbms 是 Oracle

标签: sql split timestamp


【解决方案1】:

这是一个您可以根据需要进行塑造的示例。如果您有任何其他问题,请告诉我。

with cal (col1, st, et) as 
(
               select col1, start_time as st, end_time as et  from t
    union all  select col1, st + interval '5' minute, et from cal where st <= et-interval '5' minute
)

select   *
from     cal 
order by col1, st
COL1 ST ET
1 31-OCT-22 10.05.00.000000000 31-OCT-22 10.17.00.000000
1 31-OCT-22 10.10.00.000000000 31-OCT-22 10.17.00.000000
1 31-OCT-22 10.15.00.000000000 31-OCT-22 10.17.00.000000
2 31-OCT-22 10.17.00.000000000 31-OCT-22 10.30.00.000000
2 31-OCT-22 10.22.00.000000000 31-OCT-22 10.30.00.000000
2 31-OCT-22 10.27.00.000000000 31-OCT-22 10.30.00.000000

Fiddle

【讨论】:

  • 哦,非常感谢你的这个想法:)!我认为间隔是个好主意。但它应该在 10:15 之后停止,因为那时它会改变房间。所以我们可能需要一个边框,如果模型在房间里,它应该只创建一个新列。因此,我制作了带有持续时间的 SQL。
  • 我在信息中添加了另一个时间来向您展示它的外观。它确实停止了
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-07
  • 2020-03-10
相关资源
最近更新 更多