【问题标题】:Oldest date from most recent set of records最近一组记录中的最早日期
【发布时间】:2017-08-23 08:02:36
【问题描述】:

我如何从 MySQL 中最近的一组记录中找到最早的日期?

考虑以下

+--------+-----------+------------+
| ID     | PRODUCTID | DATEACTIVE |
+--------+-----------+------------+
| 546502 | 23405     | 2017-07-20 |
| 545075 | 23405     | 2017-07-19 |
| 543651 | 23405     | 2017-07-18 |
| 456783 | 23405     | 2017-01-04 |
| 456782 | 23405     | 2017-01-03 |
| 456781 | 23405     | 2017-01-02 |
| 456780 | 23405     | 2017-01-01 |
| 65453  | 23405     | 2016-07-19 |
| 65452  | 23405     | 2016-07-18 |
+--------+-----------+------------+

我希望能够找到最近一次激活产品的时间(2017 年 7 月 18 日)

【问题讨论】:

标签: mysql date range


【解决方案1】:

下次请按照斯隆在 cmets 中的说法。

如果我理解你的问题,你可以使用这样的东西。 该查询在内部将连续日期“分组”,为每个“组”提供一个连续数字。
然后仅选择“第一个”组(最近的)并按日期升序对行进行编号。 最后选择第一个“行号”的行。

SELECT * 
 FROM (
         SELECT @rn:=@rn+1 AS RN,
             A.*
         FROM (
             SELECT @gr:= IF(@prev_date=DATE_ADD(dateactive, INTERVAL +1 DAY), @gr, @gr+1) AS GR
             ,TN.*
             ,@prev_date:=dateactive AS PD
            FROM TN
            CROSS JOIN (SELECT @gr:=0, @prev_date:=(SELECT MAX(dateactive) FROM TN)) R
            ORDER BY DATEACTIVE DESC 
             ) A
           CROSS JOIN (SELECT @rn:=0) R2     
        WHERE GR=1     
        ORDER BY DATEACTIVE
      )B
WHERE RN=1;

输出:

RN  GR  id  productid   dateactive  PD
1   1   543651  23405   18.07.2017 00:00:00 2017-07-18

【讨论】:

    【解决方案2】:
    SELECT MAX(DATEACTIVE) as most_recent_time
    FROM `YOUR_TABLE_NAME`
    WHERE PRODUCTID = 'YOUR_ID'
    

    【讨论】:

      【解决方案3】:

      您可以使用ORDER BY按日期对数据进行排序,请参见下面的代码:

      SELECT *
      FROM `YOUR_TABLE_NAME`
      WHERE `PRODUCTID` = 'YOUR_ID' 
      ORDER BY `DATEACTIVE` DESC;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-12-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多