【问题标题】:Getting Max date from the given two dates in mysql从mysql中给定的两个日期获取最大日期
【发布时间】:2017-11-04 19:35:58
【问题描述】:

我有一个表格,其结构和数据如下。

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 的数据。 任何帮助将不胜感激。

【问题讨论】:

  • 这两个日期条件是多余的。如果日期从现在开始少于 7 天,则它也比今天少。此外,您需要一个分组(EAN?)和 control_date 的最大值。请参阅下面的答案
  • 修复你的数据结构!日期应使用date 数据类型存储,而不是字符串。

标签: mysql date


【解决方案1】:

您的 SQL 语句中有错字,如果您不想要今天的日期,请使用 less and greater

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  

【讨论】:

  • 这个查询不是总结数量,而是给出较小的日期
【解决方案2】:

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

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; 

【讨论】:

  • 现在我得到了最大日期,但数量不是总和,我得到的只是 900 而不是 1468。
  • 嗨,我解决了这个问题。现在它按预期工作。谢谢
【解决方案3】:

你的陈述中有几个问题。

  • 日期条件是多余的
  • 在 Control_date 需要一个 MAX 函数
  • 需要按 n 个 EAN 分组

    选择 EAN, max(Control_date) AS control_date, 总和(数量)作为数量 来自我的表 在哪里 STR_TO_DATE(Control_date, '%d.%m.%Y')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-01
    • 2018-06-12
    • 1970-01-01
    相关资源
    最近更新 更多