【问题标题】:Group by date and show in date time in sql按日期分组并在sql中以日期时间显示
【发布时间】:2021-03-10 18:35:39
【问题描述】:

我想对数据进行计数,然后按日期分组(并以日期时间显示)。数据类型的结果必须是日期时间而不是 var char。有什么想法吗?

table_a

timestamp
2020-11-28 04:00:00
2020-11-28 05:00:00
2020-11-29 01:00:00
2020-11-29 02:00:00
2020-11-29 03:00:00

预期结果:

timestamp                 count
2020-11-28 00:00:00       2
2020-11-29 00:00:00       3

如果我查询这个:

select date(timestamp), count(*) as count
from table_a
group by date(timestamp)

结果是:

timestamp     count
2020-11-28     2
2020-11-29     3

【问题讨论】:

    标签: mysql sql datetime group-by count


    【解决方案1】:

    MYSQL:

    SELECT Concat(Cast(timestamp AS DATE), " 00:00:00") AS timestamps, 
           Count(*)                                     AS count 
    FROM   table_a 
    GROUP  BY timestamps 
    

    【讨论】:

    • 结果和我之前一样,“按日期显示”,但我想在日期时间显示@kelvin
    • 感谢您提供此代码 sn-p,它可能会提供一些有限的即时帮助。 proper explanation 将通过展示为什么这是解决问题的好方法,并使其对有其他类似问题的未来读者更有用,从而大大提高其长期价值。请edit您的回答添加一些解释,包括您所做的假设。
    • @hinafaya 如何将日期与“00:00:00”连接以获得所需的输出?
    • 谢谢,我用 CAST(DATE(timestamp) AS DATETIME) 解决了这个问题,然后按日期时间@kelvin 分组
    • 如果您认为它可以解决或有助于解决问题,请继续练习接受答案并支持答案
    【解决方案2】:

    使用此代码:

    CAST(MED_TO_DT AS DATETIME)

    您可以使用CAST 日期字段来日期时间。

    【讨论】:

    • CAST(DATEFILED AS DATETIME) 我的意思是这个而不是我复制粘贴我的代码
    • 请避免所有大写文本。您可以编辑您的答案,而不是评论更改。
    • 第一个答案。会改进
    • 结果未按日期分组@suhairsha
    【解决方案3】:

    如果您想按日期和时间分组,请使用以下查询:

    select CONVERT(timestamp, datetime) as timestamp, count(1) as count
    from table_a
    group by CONVERT(timestamp, datetime)
    

    否则,如果您确实想仅按日期分组,然后将时间戳显示为 00:00:00,请使用此查询:

    select CONVERT(CONVERT(timestamp, date), datetime) as timestamp, count(1) as count
    from table_a
    group by CONVERT(timestamp, date)
    

    【讨论】:

    • 我收到错误“未知数据类型转换”@KKJ
    • 好点,我使用 MSSQL 来运行我的查询。在 MySql 中,我相信数据类型和数据值在 CONVERT 函数中被交换 - 我更新了代码。
    【解决方案4】:

    您可以使用DATE(timestamp) 截断时间部分,并使用函数CAST() 转换回DATETIME

    SELECT CAST(DATE(timestamp) AS DATETIME) AS my_datetime, 
           COUNT(*) AS count 
    FROM table_a
    GROUP BY my_datetime;
    

    请参阅demo
    结果:

    > my_datetime         | count
    > :------------------ | ----:
    > 2020-11-28 00:00:00 |     2
    > 2020-11-29 00:00:00 |     3
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-03-11
      • 1970-01-01
      • 2021-01-03
      • 2013-01-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多