MySQL:带有连接子选择的范围之间的日期列表

标签 mysql

我从this answer知道我可以轻松地在 MySQL 中选择日期列表。

select * from 
(select adddate('1970-01-01',t4.i*10000 + t3.i*1000 + t2.i*100 + t1.i*10 + t0.i) selected_date from
 (select 0 i union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9) t0,
 (select 0 i union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9) t1,
 (select 0 i union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9) t2,
 (select 0 i union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9) t3,
 (select 0 i union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9) t4) v
where selected_date between '2012-02-10' and '2012-02-15'

到目前为止一切顺利:现在,对于每个selected_date,我想要 ie.计算另一个表(例如 reports)中的记录,其中字段 reports_dateselected_date 匹配,从而获得如下记录集:

| selected_date | reports_count |
|---------------|---------------|
| 2012-02-10    | 12            |
| 2012-02-11    | 10            |
| 2012-02-12    | 3             |
| 2012-02-13    | 0             |
| 2012-02-14    | 9             |
| 2012-02-15    | 15            |

我尝试在某处添加子查询select count(*) as reports_count from reports where reports_dated = selected_date,但没有运气

请问有什么帮助吗? 谢谢

最佳答案

您可以使用LEFT JOIN:

SELECT s.selected_date, COUNT(t2.reports_dated) AS reports_count
FROM (
select * 
from 
(select adddate('1970-01-01',t4.i*10000 + t3.i*1000 + t2.i*100 + t1.i*10 + t0.i) selected_date from
 (select 0 i union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9) t0,
 (select 0 i union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9) t1,
 (select 0 i union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9) t2,
 (select 0 i union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9) t3,
 (select 0 i union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9) t4) v
where selected_date between '2012-02-10' and '2012-02-15'
) s
LEFT JOIN table2 t2
  ON s.selected_date = t2.reports_dated
GROUP BY s.selected_date
ORDER BY selected_date;

关于MySQL:带有连接子选择的范围之间的日期列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57230648/

相关文章:

MySQL 无法添加行 : foreign key constraint fails

mysql - 全文搜索在测试和现场返回不同的结果

php - mysql_num_rows 返回零

MYSQL 添加工作日至今

Mysql 跳过 LOAD DATA INFILE 中的行

c# - Entity Framework 和 MySQL 的随机顺序

php - CodeIgniter inser/update_batch (可能)

php - 选择时获取重复记录

mysql - 提高大型数据库上 mySQL 查询的速度

php mysql编辑功能错误提交按钮显示错误