【问题标题】:MySQL Return Count for All Dates in Month, Including Those w/ Zero Results月份中所有日期的 MySQL 返回计数,包括结果为零的日期
【发布时间】:2013-10-09 18:52:05
【问题描述】:

我有一个如下所示的 MySQL 表:

+--------+------------+------------------+
|   id   | account_id |     posted_at    |
+--------+------------+------------------+
|   1    |       1    | 2013-10-05 23:09 |
|   2    |       1    | 2013-10-07 14:24 |
|   3    |       1    | 2013-10-07 01:17 |
|   4    |       1    | 2013-10-09 06:58 |
+--------+------------+------------------+

对于特定的account_id(在本例中为 1),我想返回这个(对于当前月份的日期):

+--------+------------+
|  count |    date    |
+--------+------------+
|    0   | 2013-10-01 |
|    0   | 2013-10-02 |
|    0   | 2013-10-03 |
|    0   | 2013-10-04 |
|    1   | 2013-10-05 |
|    0   | 2013-10-06 |
|    2   | 2013-10-07 |
|    0   | 2013-10-08 |
|    1   | 2013-10-09 |
+--------+------------+

我有一个 SQL 查询,它返回本月内每个日期的 COUNTS。

SELECT 
    DATE(posted_at) AS formatted_date, 
    COUNT(id) AS count 
FROM entries 
WHERE account_id = 1 
    AND MONTH(DATE(posted_at)) = MONTH(NOW()) 
GROUP BY formatted_date 
ORDER BY formatted_date ASC

它只是返回这个:

+--------+------------+
|  count |    date    |
+--------+------------+
|    1   | 2013-10-05 |
|    2   | 2013-10-07 |
|    1   | 2013-10-09 |
+--------+------------+

当然,对于没有数据的日期,COUNT 不会返回任何内容。对于没有数据的日期,我希望结果为零。

我了解到您应该创建一个包含所有可能日期的连接表。这是唯一的方法吗?

【问题讨论】:

  • 是返回 null 还是什么都不返回?
  • 它只返回计数大于 0 的日期的数据。我更新了帖子。
  • 好吧,你不能SELECT 不存在的数据(我的意思是,作为表字段中的值)。除非您使用计数器运行循环 (请参阅:存储过程)...

标签: mysql sql date


【解决方案1】:

你可以试试这样的

Declare @INT DATETIME = null
SELECT COUNT( CASE WHEN @INT IS NOT NULL THEN @INT ELSE NULL END)

我不确定 mysql 但在 sql server 中它会是这样的......

SELECT 
    DATE(posted_at) AS formatted_date, 
    COUNT( CASE WHEN IS NOT NULL THEN posted_at ELSE NULL END ) AS [count] 
FROM entries 
WHERE account_id = 1 
    AND MONTH(DATE(posted_at)) = MONTH(NOW()) 
GROUP BY formatted_date 
ORDER BY formatted_date ASC

【讨论】:

  • 您如何将其集成到现有查询中(来自问题)?
  • 嗯...返回错误。 #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'IS NOT NULL THEN formatted_date ELSE NULL END ) AS [count] FROM entries WHERE ' at line 3
  • 对不起,朋友,我给你的代码肯定会在 sql server 中工作,但我猜 mysql 和我想的 sql server 不同,抱歉
猜你喜欢
  • 1970-01-01
  • 2012-06-29
  • 1970-01-01
  • 1970-01-01
  • 2016-01-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多