我有一个包含以下结构和数据的表。
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
这里我需要总结控制日期<今天日期和控制日期>今天日期的数量并且应该小于今天+7天。这里的第二个控制日期是 05.06.2017 并且大于今天的日期并且小于(03.05.2017 +7 天) 但我总是得到控制日期小于今天的日期。
1 4046228081410 26.05.2017 1468
但我需要控制日期为 05.06.2017 的数据。 任何帮助将不胜感激。
最佳答案
你真的应该修正你的日期格式。如果您将该值存储为日期,则查询将只是:
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;
关于mysql - 从mysql中给定的两个日期获取最大日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44345049/