![]() |
1
6
使用子查询
解决这个问题的一种方法是
subqueries
.
结果: +----+----------------------+-----------------------+ | id | total_sold_this_week | total_sold_this_month | +----+----------------------+-----------------------+ | 1 | 3 | 7 | | 2 | 4 | 4 | | 3 | NULL | NULL | +----+----------------------+-----------------------+ 3 rows in set (0.04 sec) 使用SUM(大小写…)
此方法不使用子查询(在较大的数据集上可能更快)。我们想将表A和表B连接在一起一次,使用我们的“最大”日期范围,然后使用
这将返回与子查询示例几乎相同的结果集: +----+-----------------------+----------------------+ | id | total_sold_last_month | total_sold_last_week | +----+-----------------------+----------------------+ | 1 | 7 | 3 | | 2 | 4 | 4 | | 3 | NULL | 0 | +----+-----------------------+----------------------+ 3 rows in set (0.00 sec)
唯一的区别是
只是为了展示它的工作原理:移除
+----+------------+-----------------------+----------------------+ | id | date_sold | total_sold_last_month | total_sold_last_week | +----+------------+-----------------------+----------------------+ | 1 | 2010-04-30 | 2 | 2 | | 1 | 2010-04-24 | 2 | 0 | | 1 | 2010-04-24 | 2 | 0 | | 1 | 2010-05-03 | 1 | 1 | | 2 | 2010-05-03 | 4 | 4 | | 3 | NULL | NULL | 0 | +----+------------+-----------------------+----------------------+ 6 rows in set (0.00 sec)
现在当你
陈旧的建议
在将两个不同的日期范围加入到组合中之前,您可以使用
+----+----------------------+ | id | total_sold_this_week | +----+----------------------+ | 1 | 7 | | 2 | 4 | | 3 | NULL | +----+----------------------+ 3 rows in set (0.00 sec) 测试数据
mysql> select * from table_a; select * from table_b; +----+ | id | +----+ | 1 | | 2 | | 3 | +----+ 3 rows in set (0.00 sec) +----+------------+------------+ | id | date_sold | total_sold | +----+------------+------------+ | 1 | 2010-04-24 | 2 | | 1 | 2010-04-24 | 2 | | 1 | 2010-04-30 | 2 | | 1 | 2010-05-03 | 1 | | 2 | 2010-05-03 | 4 | +----+------------+------------+ 5 rows in set (0.00 sec) |
![]() |
Benny74 · 日期范围查询未返回所有记录-SQL 12 年前 |