MySQL日期范围获取的结果不正确-查询忽略指定的范围
我有一个查询,涉及在30天内搜索数据库。输出正确和输出错误的查询如下:MySQL日期范围获取的结果不正确-查询忽略指定的范围,mysql,date,date-range,Mysql,Date,Date Range,我有一个查询,涉及在30天内搜索数据库。输出正确和输出错误的查询如下: CORRECT RESULTS: SELECT affiliates.member_id, IFNULL( COUNT(orders.deal_id) , 0 ) AS deals_count, IFNULL( SUM(orders.quantity) , 0 ) AS deals_quanity FROM affiliates LEFT JOIN deals ON affiliates.member
CORRECT RESULTS:
SELECT
affiliates.member_id,
IFNULL( COUNT(orders.deal_id) , 0 ) AS deals_count,
IFNULL( SUM(orders.quantity) , 0 ) AS deals_quanity
FROM affiliates
LEFT JOIN deals ON affiliates.member_id = deals.member_id
LEFT JOIN orders ON deals.deal_id = orders.deal_id
LEFT JOIN customers_orders_link ON orders.order_id = customers_orders_link.order_id
AND DATE(customers_orders_link.datetime) BETWEEN '2011-06-01' AND '2011-07-01'
AND customers_orders_link.order_status = 'Delivered'
GROUP BY affiliates.member_id;
预期和收到:(正确)
错误结果:
//Notice the change in the date range
SELECT
affiliates.member_id,
IFNULL( COUNT(orders.deal_id) , 0 ) AS deals_count,
IFNULL( SUM(orders.quantity) , 0 ) AS deals_quanity
FROM affiliates
LEFT JOIN deals ON affiliates.member_id = deals.member_id
LEFT JOIN orders ON deals.deal_id = orders.deal_id
LEFT JOIN customers_orders_link ON orders.order_id = customers_orders_link.order_id
AND DATE(customers_orders_link.datetime) BETWEEN '2011-10-01' AND '2011-10-31'
AND customers_orders_link.order_status = 'Delivered'
GROUP BY affiliates.member_id
预期:
MemberID COUNT SUM
1 0 0
2 0 0
但我收到:(输出不正确)
第一个查询生成正确的结果,而第二个查询生成错误的结果。即使我使用过去的日期作为范围,我仍然会收到相同的错误输出。这就好像查询完全忽略了日期范围规范一样。因此,忽略日期范围规范的情况似乎就是问题所在
如何使查询“查看”和“遵守”日期范围规范,并实际收到上面列出的第二次查询的预期输出
编辑1:
//Table: Orders
order_id deal_id quantity price
1 1 2 40.00
1 2 1 15.00
2 1 1 20.00
3 9 1 5.00
4 1 2 40.00
4 9 2 10.00
5 1 1 20.00
5 9 1 5.00
6 1 2 40.00
6 9 2 10.00
7 1 1 20.00
8 11 1 1.00
//Table: customers_orders_link
order_id customer_id order_status datetime
1 4 Cancelled 2011-06-05 20:26:45
2 4 Delivered 2011-06-05 20:38:28
3 4 Pending Payment 2011-06-05 20:56:50
4 4 Pending Payment 2011-06-09 17:03:08
5 4 Pending Payment 2011-06-09 17:12:23
6 4 Pending Payment 2011-06-09 17:19:57
7 4 Pending Payment 2011-06-09 17:40:59
8 4 Pending Payment 2011-06-10 03:55:17
我不知道你的数据是什么样子的,但我怀疑你的
左加入客户\u订单\u链接
是罪魁祸首。如果您只想在满足该表的条件时计算COUNT()和SUM(),那么它应该是一个标准的联接
,而不是左联接
,我自己用一种完全不同的方法解决了它。感谢您的回复,我已经添加了必要的表结构。加入客户订单链接是必要的,因为它是唯一一个给我们“订单状态”的表,我们只需要计算和汇总已交付的订单。此外,我们需要显示所有的会员ID是否有任何交易购买。因此,我们查询附属公司表作为主表,并左键联接其他表,因为它们可能/可能没有与交易相关的数据。请看一下编辑1,也许会更清楚?
MemberID COUNT SUM
1 11 16
2 0 0
//Table: Orders
order_id deal_id quantity price
1 1 2 40.00
1 2 1 15.00
2 1 1 20.00
3 9 1 5.00
4 1 2 40.00
4 9 2 10.00
5 1 1 20.00
5 9 1 5.00
6 1 2 40.00
6 9 2 10.00
7 1 1 20.00
8 11 1 1.00
//Table: customers_orders_link
order_id customer_id order_status datetime
1 4 Cancelled 2011-06-05 20:26:45
2 4 Delivered 2011-06-05 20:38:28
3 4 Pending Payment 2011-06-05 20:56:50
4 4 Pending Payment 2011-06-09 17:03:08
5 4 Pending Payment 2011-06-09 17:12:23
6 4 Pending Payment 2011-06-09 17:19:57
7 4 Pending Payment 2011-06-09 17:40:59
8 4 Pending Payment 2011-06-10 03:55:17