我有这样的SQL(其中$ytoday
是5天前):
$sql = 'SELECT Count(*), created_at FROM People WHERE created_at >= "'. $ytoday .'" AND GROUP BY DATE(created_at)';
我希望每天返回一个值,因此在这种情况下会返回5个结果(5天前直到今天)。
但是昨天说Count(*)
为0,而不是返回零,它在该日期根本不会返回任何数据。
如何更改该SQLite查询,以便它还返回计数为0的数据?
答案 0 :(得分:9)
如果没有复杂的(在我看来)查询,您的输出数据集将不包含输入数据集中不存在的日期。这意味着您需要一个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
答案 1 :(得分:4)
您需要在日期列表中保持联接。您可以创建一个包含所需日期的表格,也可以采用我在此概述的动态方法: