我一直在搜索没有成功的方法,以便在报告中的两个日期之间以格式YEAR-MONTH
列出所有月份的数据。
我的此查询运行良好,但没有显示数据不存在的月份。
SELECT DATE_FORMAT(FROM_UNIXTIME(bt.date_submitted),'%Y-%m') AS month, count(*) as the_count
FROM bug_table bt
WHERE bt.category_id=2
AND bt.date_submitted BETWEEN " . db_prepare_string( $db_datetimes['start'] ) . "
AND " . db_prepare_string( $db_datetimes['finish'] ) . "
GROUP BY month
ORDER BY month ASC
date_submitted
是一个UNIX_TIMESTAMP,$db_datetimes
是php上的一个关联数组,用于存储用户选择的日期。
例如,我想要2016-10-01和2017-03-20之间的所有月份的列表。我得到了:
month | the_count
2017-03 7
2017-02 5
2017-01 2
2016-12 10
但我想如下,包括有任何记录的月份零:
month | the_count
2017-03 7
2017-02 5
2017-01 2
2016-12 10
2016-11 0
2016-10 0
真诚地我更喜欢在SQL上解决这个问题,但欢迎使用SQL或php的任何想法!
答案 0 :(得分:0)
您可以创建一个包含所有月份的表格,并从该表格到主表格进行左连接。然后用0替换NULL。
答案 1 :(得分:0)
您是否尝试过加入日期 FROM table1 LEFT OUTER JOIN date ON table1.date = table2.date
答案 2 :(得分:0)
您可以采用以下方法之一:
month-year
值列表,并将该查询的LEFT JOIN
结果创建为您正在使用的值。 SO答案的示例是here。calenar
表并使用dates
填充该表。然后,您可以将LEFT JOIN
与calendar
一起使用并获取值。db
检索的结果在用户界面上显示值)。 我建议使用第三种方法,因为它是最干净的方法,不会增加数据库或服务层的复杂性。