【问题标题】:Group by day of week and hour of day in SQL在 SQL 中按星期几和一天中的小时分组
【发布时间】:2017-08-25 07:53:19
【问题描述】:

我有一列充满了时间戳

例如。

               col1
2017-01-01 10:30:00
2017-01-02 08:10:00
...

我想按星期几分组,然后再按小时分组。

输出看起来像

day  hour  count
  1     1      5
        2     12
  2     1     10
        5      3
  ...

我将如何在 SQL 中实现这一点? 我正在使用 MySQL。

【问题讨论】:

  • 星期一的第 1 天?
  • 我相信 SQL 使用 dayofweek() 函数将 1 实现为星期日?
  • ANSI SQL 没有这个功能。也许 MySQL 有? ISO 8601 说星期一是第一天。由于不同的国家有不同的方式,你最好指定你想要什么。
  • 对不起,忘了说我使用的是 MySQL。据我所知,第一天是星期日。

标签: mysql sql timestamp


【解决方案1】:

在派生表中提取工作日和小时。 GROUP BY 结果,类似:

select d, h, count(*)
from
(
    select dayofweek(col1) d, hour(col1) h
    from tablename
) dt
group by d, h

注意:由于我不了解 MySQL,您可能需要调整星期几和小时部分...

【讨论】:

    【解决方案2】:
    select getdate() as Dates into #temp
    
    select datepart(DAY,dates), datepart(hour, dates), count(*) from #temp group by dates
    

    是我使用datepart 函数的方式。

    【讨论】:

      【解决方案3】:

      你可以在分组中使用mysql函数dayofweek和hour

      在 mysql 中:

      CREATE TABLE IF NOT EXISTS test (
        col TIMESTAMP
      ) ;
      
      INSERT INTO test (col) VALUES
        (TIMESTAMPADD(HOUR, 7, TIMESTAMPADD(DAY, 1, CURDATE()))),
        (TIMESTAMPADD(HOUR, 6, TIMESTAMPADD(DAY, 2, CURDATE()))),
        (TIMESTAMPADD(HOUR, 7, TIMESTAMPADD(DAY, 3, CURDATE()))),
        (TIMESTAMPADD(HOUR, 7, TIMESTAMPADD(DAY, 10, CURDATE()))),
        (TIMESTAMPADD(HOUR, 7, TIMESTAMPADD(DAY, 1, CURDATE()))),
        (TIMESTAMPADD(HOUR, 6, TIMESTAMPADD(DAY, 2, CURDATE())))
      ;
      
      SELECT dayofweek (col), hour(col), count(*)
      FROM test GROUP BY dayofweek(col), hour(col);
      

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-08-10
      • 2011-10-31
      • 1970-01-01
      • 1970-01-01
      • 2018-07-10
      • 2021-02-10
      • 2021-11-06
      • 2020-06-01
      相关资源
      最近更新 更多