2017-08-23 145 views
-4

如何从最新一组记录中找到最早日期?从最近一批记录中删除最旧日期

考虑以下

+--------+-----------+------------+ 
| 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日)

+1

是哪一个?最古老还是最近?你已经要求对立面。 –

+1

您需要自己**编写代码**。 [做更多的研究](https://meta.stackoverflow.com/q/261592/1011527) 如果你有问题**发布你已经尝试过**的**清楚解释什么不是working **和 提供[最小,完整和可验证示例](http://stackoverflow.com/help/mcve)。 阅读[如何提出一个好问题](http://stackoverflow.com/help/how-to-ask)。 请务必[参观](http://stackoverflow.com/tour)并阅读[this](https://meta.stackoverflow.com/q/347937/1011527)。 –

+0

最近一组并发日期中最早的日期。 –

回答

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

你可以使用ORDER BY通过对数据进行排序日期,请参阅下面的代码:

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

请下一次f ollow斯隆在评论中所说的话。

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

SELECT * 
FROM (
     SELECT @rn:[email protected]+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