从mysql中的给定两个日期获取最大日期

时间:2017-06-03 14:37:31

标签: mysql date

我有一张包含以下结构和数据的表格。

id ean           Control_date qty
1  4046228081410 26.05.2017   568
2  4046228081410 05.06.2017   900

我的预期结果如下所示

2  4046228081410 05.06.2017   1468

为了实现这一点,我使用以下查询

 SELECT EAN,Control_date,SUM(Qty) AS Qty FROM mytable WHERE
(STR_TO_DATE(`Control_date`,'%d.%m.%Y') <= STR_TO_DATE('03.06.2017','%d.%m.%Y') 
OR 
STR_TO_DATE(`Control_date`, '%d.%m.%Y') <= DATE_ADD(STR_TO_DATE('03.06.2017', '%d.%m.%Y'), INTERVAL 7 DAY))
AND ean = 4046228081410  

这里我需要总结一下控制日期&lt;今天的日期和控制日期&gt;今天的日期应该比今天的日期少7天。这里的第二个控制日期是05.06.2017并且大于今天的日期且小于(03.05.2017 +7天) 但总是我得到控制日期少于今天的日期。

1  4046228081410 26.05.2017   1468

但我需要控制日期 05.06.2017。的数据 任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:1)

您应该真正修复日期格式。如果您将值存储为日期,则查询将只是:

SELECT EAN, MAX(Control_date), SUM(Qty) AS Qty
FROM mytable
WHERE Control_date < CURDATE() + INTERVAL 7 DAYS AND
      Control_date >= CURDATE() AND
      ean = 4046228081410 
GROUP BY ean; 

注意:如果您想要一个恒定日期,可以使用'2017-06-03'之类的常量。但是,您的问题具体说明了当前的日期。

仅仅因为您的数据中存储了伪造的日期格式并不意味着您必须在查询中使用相同的格式。表达式'2017-06-03'(或DATE('2017-06-03'))比更复杂的STR_TO_DATE()表达式更简单。

在您的情况下,咬住子弹并以正确的格式输出日期,这样您就可以:

SELECT EAN, MAX(STR_TO_DATE(`Control_date`, '%d.%m.%Y')), SUM(Qty) AS Qty
FROM mytable
WHERE STR_TO_DATE(`Control_date`, '%d.%m.%Y') < CURDATE() + INTERVAL 7 DAYS AND
      STR_TO_DATE(`Control_date`, '%d.%m.%Y') >= CURDATE() AND
      ean = 4046228081410 
GROUP BY ean; 

答案 1 :(得分:0)

您的SQL语句中有拼写错误,如果您不想要今天的日期,那么请使用越来越少的

{{1}}

答案 2 :(得分:0)

你发言中的几个问题。

  • 日期条件多余
  • 在Control_date上需要MAX功能
  • 需要nAN组

    选择     EAN,     max(Control_date)AS control_date,     SUM(Qty)AS数量 来自mytable 哪里     STR_TO_DATE(Control_date,&#39;%d。%m。%Y&#39;)&lt; = DATE_ADD(STR_TO_DATE(&#39; 03.06.2017&#39;,&#39;%d。% m。%Y&#39;),INTERVAL 7天)     和     ean = 4046228081410 GROUP BY EAN