最新记录集中最早的日期

时间:2017-08-23 08:02:37

标签: mysql date range

如何从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日)

3 个答案:

答案 0 :(得分:1)

请继续关注斯隆在评论中所说的内容。

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

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

答案 1 :(得分:0)

SELECT MAX(DATEACTIVE) as most_recent_time
FROM `YOUR_TABLE_NAME`
WHERE PRODUCTID = 'YOUR_ID'

答案 2 :(得分:0)

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

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