15

我有这样的 SQL($ytoday5 天前在哪里):

$sql = 'SELECT Count(*), created_at FROM People WHERE created_at >= "'. $ytoday .'" AND GROUP BY DATE(created_at)';

我希望它每天返回一个值,因此在这种情况下它会返回 5 个结果(从 5 天前到今天)。

但是说Count(*)昨天为 0,而不是返回零,它根本不返回该日期的任何数据。

如何更改该 SQLite 查询,使其也返回计数为 0 的数据?

4

2 回答 2

12

如果没有复杂的(在我看来)查询,您的输出数据集将不包含输入数据集中不存在的日期。这意味着您需要一个有 5 天时间才能加入的数据集。

简单的版本是创建一个包含 5 个日期的表,然后加入该表。我通常会创建并保留(有效缓存)日历表,其中包含我可能需要的每个日期。 (例如从 1900-01-01 到 2099-12-31。)

SELECT
  calendar.calendar_date,
  Count(People.created_at)
FROM
  Calendar
LEFT JOIN
  People
    ON Calendar.calendar_date = People.created_at
WHERE
  Calendar.calendar_date >= '2012-05-01'
GROUP BY
  Calendar.calendar_date
于 2012-05-14T15:56:15.957 回答
5

您需要根据日期列表离开加入。您可以创建一个包含所需日期的表格,也可以采用我在此处概述的动态方法:

从日期范围生成天数

于 2012-05-14T15:55:56.253 回答