我有一张包含以下结构和数据的表格。
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。的数据 任何帮助将不胜感激。
答案 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)
你发言中的几个问题。
需要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