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

标签 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  

这里我需要总结控制日期<今天日期和控制日期>今天日期的数量并且应该小于今天+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/

相关文章:

php - PHP中的字符串比较

mysql - SQL Distinct 子句不起作用?

sql - 在插入时向日期时间添加分钟 - mysql

javascript - 检查 ISO 8601 日期是否早于 5 分钟

mysql - 散列密码字段使用什么数据类型和长度?

php - MYSQL 插入到 laravel 5.5 请求 Controller

mysql - 修剪mysql中的中间数字?

ruby-on-rails - 将日期时间与今天的日期进行比较

R:复制一行并在每行的下一个日期更新

Postgresql:如何查找 2 个日期和 2 个时间之间的小时数?