首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用间隔但具有重叠的时间范围组分组数据

问用间隔但具有重叠的时间范围组分组数据
EN

Database Administration用户
提问于 2020-02-15 15:25:38
回答 2查看 747关注 0票数 0

目前,我已经构造了一个按查询分组,其中返回一个间隔15分钟的时间列表及其计数聚合列表。

代码语言:javascript
复制
SELECT 
    CONVERT(DATE, DATETIME_COLUMN) AS DATE,
    CONVERT(TIME(0), DATEADD(MINUTE, (DATEDIFF(MINUTE, '20000101', DATETIME_COLUMN) / 15)*15, '20000101')) AS TIME_START_INTERVAL,
    DATEADD(SECOND, -1, CONVERT(TIME(0), DATEADD(MINUTE, 60, DATEADD(MINUTE, (DATEDIFF(MINUTE, '20000101', DATETIME_COLUMN) / 15)*15, '20000101')))) AS TIME_END_INTERVAL
FROM 
    TABLE
GROUP BY
    CONVERT(DATE, DATETIME_COLUMN),
    DATEADD(MINUTE, (DATEDIFF(MINUTE, '20000101', DATETIME_COLUMN) / 15)*15, '20000101')

但是,这只会将它们分组15分钟。有任何方式,我可以让他们分组,如图中所示?预计数据重叠是因为时间范围重叠。

EN

回答 2

Database Administration用户

回答已采纳

发布于 2020-02-15 16:23:28

下面是一种可以用来计算重叠范围的技术。这种方法使用了一个包容性的开始和独占时间范围,以确保带有小数秒的日期时间值不会掉在地板上(例如,'2018-01-28 00:59:59.123'),但是仍然报告结束时间没有小数秒,就像问题中的数据一样。

代码语言:javascript
复制
WITH
    intervals_15_minutes AS (
        SELECT DISTINCT
             DATEADD(MINUTE, (DATEDIFF(MINUTE, '', DATETIME_COLUMN) / 15)*15, '') AS TIME_START_INTERVAL
        FROM dbo.YourTable
    )
SELECT
      CAST(TIME_START_INTERVAL AS date) AS DATE
    , CAST(TIME_START_INTERVAL AS time(0)) AS TIME_START_INTERVAL
    , CAST(DATEADD(second, -1, DATEADD(MINUTE, 60, TIME_START_INTERVAL)) AS time(0)) AS TIME_END_INTERVAL
    , COUNT(*) AS OVERLAPPING_COUNT
FROM  intervals_15_minutes
JOIN  dbo.YourTable ON
    YourTable.DATETIME_COLUMN >= intervals_15_minutes.TIME_START_INTERVAL
    AND YourTable.DATETIME_COLUMN < DATEADD(MINUTE, 60, TIME_START_INTERVAL)
GROUP BY
      intervals_15_minutes.TIME_START_INTERVAL;
票数 1
EN

Database Administration用户

发布于 2020-02-15 21:11:33

声明@temp INT;

设置@temp:=0;选择date,TIME_START_INTERVAL,TIME_END_INTERVAL,@temp AS TEMP_TIME_INTERVAL,COUNT(*) FROM (选择date,TIME_START_INTERVAL,TIME_END_INTERVAL,@temp:=TIME_START_INTERVAL FROM TABLE,(选择@temp:=0))N MINUTE(TIMEDIFF(TIME_START_INTERVAL,TEMP_TIME_INTERVAL))=15组按日期分组,TIME_START_INTERVAL,TIME_END_INTERVAL

票数 0
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/259764

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档