MYSQL之间不包括最大日期

时间:2014-01-09 17:38:05

标签: mysql sql date between

首先,我很抱歉这种格式。这是我的第一次,我真的不知道如何在这里展示表格。

这是我的语法:

SELECT order.id, order.begin, order.end, report.id, 
   DATE_FORMAT( report.add_date, '%Y-%m-%d' ) AS report_add_date, sums.id, sums.qty 
FROM order, report, sums 
WHERE (report.add_date BETWEEN order.begin AND order.end) 
  AND (report.id = sums.id) 
ORDER BY order.id ASC

它给出了以下结果:

order.id | order.begin | order.end  | report.id | report.add_date | sums.id | sums.qty
     255 | 2013-10-21  | 2013-10-22 | 390       | 2013-10-21      | 390     | 250
     256 | 2013-10-22  | 2013-10-23 | 393       | 2013-10-22      | 393     | 385

最终结果应如下所示:

order.id | order.begin | order.end  | report.id | report.add_date | sums.id | sums.qty
     255 | 2013-10-21  | 2013-10-22 | 390       | 2013-10-21      | 390     | 250
     255 | 2013-10-21  | 2013-10-22 | 393       | 2013-10-22      | 393     | 385
     256 | 2013-10-22  | 2013-10-23 | 393       | 2013-10-22      | 393     | 385

希望您能看到,我正在尝试为所有order.id获取所有sums.qty,其中report.add_date位于order.begin和order.end日期之间。

有3个表:订单,报告和总和。 订单包含范围日期(开始 - 结束)。报告包含日期(add_date)。 Sums包含qty,它与id by Report。相关。

  

Order.id 255应该获得2013-10-21和2013-10-22之间日期的所有sums.qty。

     

Order.id 256应该获得2013-10-22和2013-10-23之间日期的所有sums.qty。

     

第一个没有获得2013-10-22日期的sums.qty,因为这个是后者。

据我所知,它不重复行,因此它只显示每一行。因此,当以下order.id以前一个结束日期开始时,它会停止将report.id分配给之前的order.id。

我做错了什么?提前谢谢!

1 个答案:

答案 0 :(得分:1)

我猜add_dateDATETIME,而您未在DATE条件中将其转换为BETWEEN。日期有0时间,因此虽然BETWEEN包含{{1}},但如果附加非零时间部分则不包括相同的日期。

我还建议切换到显式连接,因为隐式连接已被弃用了很长时间。