如果某个帐户的state
col值相同,那么我需要从下表中获取记录,然后获取date_time
值最大的行,否则获取state
的最大值< / strong>
state max表示:哪个数字最大(如Desc顺序)
state3
>state2
>state1
表格
-----------------------------------------------------------------------
Id | account | Name | state | date_time
-----------------------------------------------------------------------
1 | 145552 | Salleh | state2 | 2020-05-08T20:55:45Z
2 | 145552 | Salleh | state3 | 2020-05-04T06:50:27Z
3 | 145552 | Salleh | state1 | 2020-04-01T21:10:32Z
4 | 836001 | Sharifudeen | state2 | 2020-05-14T01:10:40Z
5 | 836001 | Sharifudeen | state3 | 2020-05-13T01:10:40Z
6 | 321032 | Amir | state1 | 2020-05-14T01:10:40Z
7 | 321032 | Amir | state1 | 2020-05-15T01:10:40Z
上表中的必需结果
-----------------------------------------------------------------------
Id | account | Name | state | date_time
-----------------------------------------------------------------------
2 | 145552 | Salleh | state3 | 2020-05-04T06:50:27Z
5 | 836001 | Sharifudeen | state3 | 2020-05-13T01:10:40Z
7 | 321032 | Amir | state1 | 2020-05-15T01:10:40Z
我的查询:根据所描述的条件,它没有给我上面期望的结果。
条件: 如果帐户的状态相同,则获取date_time值最大的行,否则获取状态最大的行
SELECT a.*
FROM accounts a
INNER JOIN
(SELECT account, max(state) as state, MAX(date_time) AS MaxDateTime
FROM accounts
GROUP BY account order by state,date_time desc) acc
ON a.account = acc.account
and a.state = acc.state
group by a.account
我的查询结果
-----------------------------------------------------------------------
Id | account | Name | state | date_time
-----------------------------------------------------------------------
2 | 145552 | Salleh | state3 | 2020-05-04T06:50:27Z
5 | 836001 | Sharifudeen | state3 | 2020-05-13T01:10:40Z
6 | 321032 | Amir | state1 | 2020-05-14T01:10:40Z
以上两行正确,但帐户321032的最后一行不正确,应为第7个id行。
请帮助我。 谢谢
答案 0 :(得分:1)
SELECT t3.*
FROM accounts t3
JOIN ( SELECT account, state, max(t2.date_time) as date_time
FROM accounts t2
JOIN ( SELECT account, max(state) as state
FROM accounts t1
GROUP BY account
) subquery1 USING (account, state)
GROUP BY t2.account, t2.state
) subquery2 USING (account, state, date_time);