【问题标题】:How to group by minute within a timerange and display 0 values in MySQL?如何在时间范围内按分钟分组并在 MySQL 中显示 0 值?
【发布时间】:2011-04-29 06:52:14
【问题描述】:

我想在以下查询中按 date1 和 date2 之间的每一分钟进行分组。还应显示 0 值。所以应该显示日期之间的每一分钟。问题是表格中不存在这些日期。

SELECT 
click.date as 'date',
COUNT(*)
FROM click 
INNER JOIN short_url surl ON click.short_url_id = surl.id
INNER JOIN article_surl ON article_surl.article_id = 3
WHERE click.date BETWEEN (?Date1:'2011-04-24 13:33:00') AND (?Date2:'2011-04-24 15:33:00')
GROUP BY DATE_FORMAT(click.date, '%Y-%m-%d %H:%i:00');

我认为唯一的方法是制作一个临时表?这对性能有何影响?加入日期也不是很好,因为 click.date 在日期时间中也可能有毫秒。那么应该使用 DateFormat 吗? 也许在我的应用程序逻辑中这样做更好,读取数组并用 0 值填充缺失的日期。

【问题讨论】:

    标签: mysql sql datetime


    【解决方案1】:

    我认为您在应用程序逻辑中填充缺失值的建议是避免创建临时表的最佳选择,尤其是在您无论如何都要处理数组的情况下。我们在我们编写的一些服务中做同样的事情。

    【讨论】:

      【解决方案2】:

      要按分钟分组,您可以使用此子句 -

      ...
      GROUP BY DAYOFYEAR(click.date), (60 * HOUR(click.date) + MINUTE(click.date))
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-05-19
        • 2011-06-28
        • 1970-01-01
        • 2015-01-22
        • 2017-06-20
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多