【问题标题】:How to split time range into intervals in a 'Select' SQL query如何在“选择”SQL 查询中将时间范围拆分为间隔
【发布时间】:2018-01-23 16:53:43
【问题描述】:

我是 SQL 的新手,我在工作中写了一些 SQL 查询。 我遇到了某个拦截器,你们能帮我解决一下吗?

这是我使用的查询(仅使用 1 行作为参考):

Select 
USER_NAME, 
TIME(CONVERT_TZ(START_TIME, '+00:00','America/Los_Angeles')) as 'PST Start',
TIME(CONVERT_TZ(END_TIME, '+00:00','America/Los_Angeles')) as 'PST End',
name as 'Type',
date(start_time) as 'Date',
WORKGROUP_NAME
from USER_SCHEDULE_INSTANCES 
where user_name = 'prateeth' 
and date(START_TIME) = '2018-01-01'
limit 1

这是输出

USER_NAME   PST Start   PST End     Date        Type    WORKGROUP_NAME
prateeth    06:00:00    09:00:00    2018-01-01  Work    NACS Command Center

如何在不使用宏的情况下将其分成半小时间隔并接收如下输出:

USER_NAME   PST Start   PST End     Date        Type    WORKGROUP_NAME
prateeth    06:00:00    06:30:00    2018-01-01  Work    NACS Command Center
prateeth    06:30:00    07:00:00    2018-01-01  Work    NACS Command Center
prateeth    07:00:00    07:30:00    2018-01-01  Work    NACS Command Center
prateeth    07:30:00    08:00:00    2018-01-01  Work    NACS Command Center
prateeth    08:00:00    08:30:00    2018-01-01  Work    NACS Command Center
prateeth    08:30:00    09:00:00    2018-01-01  Work    NACS Command Center

【问题讨论】:

  • 可能有更优雅的方法,但我喜欢在这里创建一个参考表,供您加入(可以接受交叉联接),其中记录了时间范围。
  • 我喜欢同样的方法,因为性能非常好。
  • @Prateeth 。 . .这是一个相当复杂的查询。
  • 好吧,业余爱好者,不是首发:D

标签: mysql sql mysql-workbench


【解决方案1】:

评论回答。创建一个时间表并填充您正在寻找的时间范围。大致如下:

Table Name: Dim_Time 
example data:

ID    starttime   endtime
1     06:00       06:30
2     06:30       07:00
etc

当您需要拆分到时间范围时,在您的 from 语句中交叉连接到此表。

From  USER_SCHEDULE_INSTANCES 
join dim_time on 1=1

您可以在此时间表中添加第二个 ID 列,这样您也可以细分此时间的多个“版本”。

希望这很清楚,如果您需要更多,请发表评论。

【讨论】:

  • 我喜欢这个想法,但我无权在此数据库上创建表(访问权限非常有限)。有什么办法可以把它放在查询中?另外,请您详细说明 ON 语句,我无法弄清楚如何表达。非常感谢您的回复
  • 我明白了,我已经使用 DUAL 表在查询中创建了一个虚拟表。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-20
  • 2012-10-19
  • 1970-01-01
相关资源
最近更新 更多