首页 > 解决方案 > mysql根据日期选择最新数据

问题描述

id | status  |  dateCreate
1  |   0     |  2020-02-15 15:41:06
2  |   1     |  2020-02-18 15:41:06
1  |   1     |  2020-02-18 15:41:06
2  |   0     |  2020-02-25 15:41:06
1  |   1     |  2020-03-01 15:41:06
4  |   1     |  2020-03-18 15:41:06
3  |   1     |  2020-03-19 15:41:06
7  |   0     |  2020-03-20 15:41:06
5  |   1     |  2020-03-21 15:41:06
4  |   0     |  2020-03-21 15:41:06
8  |   1     |  2020-03-22 15:41:06
4  |   1     |  2020-03-23 15:41:06

这是我的示例表,我想做的是获取每个 id 为 1 的最新状态,因此根据表,我想要的结果是:

id |  status  |  dateCreate
1  |   1      |  2020-03-18 15:41:06
4  |   1      |  2020-03-18 15:41:06
3  |   1      |  2020-03-19 15:41:06
5  |   1      |  2020-03-21 15:41:06
8  |   1      |  2020-03-22 15:41:06

由于 id 2 最新状态为 0

这是我的示例查询,它没有得到我想要的,因为它也获得了 id 2,因为它之前的状态为 1。我想要的结果是根据 dateCreate 获得最新状态,状态为 1

SELECT A.id,A.status, MAX(A.dateCreate)
        FROM (SELECT id, status, dateCreate
              FROM table status = 1) A GROUP BY A.id ORDER BY A.dateCreate desc

标签: mysql

解决方案


加入并测试

select t.*
from t
join (select id, max(datecreate) maxdate from t group by id) s on s.id = t.id and s.maxdate = t.datecreate 
where t.status = 1

推荐阅读