在mysql中循环一个列

时间:2014-10-07 18:23:58

标签: mysql

我有一个看起来像这样的表,我想知道在六小时时间段内注册的条目数,并显示具有最大条目数的那个时间段。

Time
09:42:29
10:37:28
15:18:49
15:28:34
16:43:51
18:14:10
18:26:06
18:26:14

因此,对于时间列中的每个元素,我将包含从该元素开始的6小时时段,并计算该时段中该列中的条目数。 出09:42:29将结束时间为15:42:29并且应该计为4(09:42:29,10:37:28) 15:18:49,15:28:34)

对时间列中的每个元素以及具有最大计数的元素执行此操作,这将是句点的开始时间并相应地显示开始和结束时间。

帮我写一个mysql查询。谢谢!!!

1 个答案:

答案 0 :(得分:0)

希望有所帮助

select
    T.TimeStart,
    T.TimeEnd,
    COUNT(*)
from (
    select
        T.Time TimeStart,
        date_add(T.Time,INTERVAL 6 HOUR) TimeEnd
    from TimeTable T
) T
inner join TimeTable T2 on
    T2.Time between T.TimeStart and T.TimeEnd
group by
    T.TimeStart,
    T.TimeEnd

以下代码适用于MSSQL,但它按预期工作,应该为您提供一些如何使用上述示例的指南

WITH TimeTable([Time]) AS (
select
CONVERT(DATETIME,a.a)
from (
values
('09:42:29'),
('10:37:28'),
('15:18:49'),
('15:28:34'),
('16:43:51'),
('18:14:10'),
('18:26:06'),
('18:26:14'))a(a)
)
select
    convert(time(7),T.TimeStart)TimeStart,
    convert(time(7),T.TimeEnd)TimeEnd,
    COUNT(*) [Ocorrences]
from (
    select
        T.Time TimeStart,
        DATEADD(HOUR,6,T.Time) TimeEnd
    from TimeTable T
) T
inner join TimeTable T2 on
    T2.Time between T.TimeStart and T.TimeEnd
group by
    T.TimeStart,
    T.TimeEnd

Result