[英]Query to Find minimum date in group by
考慮以下查詢;
SELECT id, MIN(updated_at)
FROM accounts
GROUP BY mem_id, account, sub_account
HAVING COUNT(*) > 1
通過對選定字段進行分組並在這些分組中打印id
和最小的updated_at
值來查找重復項的簡單語句。
我遇到的問題是它將打印最小的updated_at
值,但與它一起打印的id
可能與某些行中的其他重復條目相關聯。
好像是從最小的updated_at
值中分別(隨機)選擇每個分組中的id
。 每次如何獲取與最小的updated_at
值關聯的id
的預期行為?
示例數據:
(id, mem_id, account, sub_account, updated_at) VALUES (2351, 12, 123456, 12345, 2016-04-30)
(id, mem_id, account, sub_account, updated_at) VALUES (7638, 12, 123456, 12345, 2016-06-15)
我的目的是獲取這兩個值中的最小值的updated_at
的id
。 因此,我想要id 2351
但在某些行中,它將隨機返回其他ID。
可能是您必須使用subselect和另一個group by
select id, update_at
from accounts
where update_at in (
select MIN(updated_at)
FROM accounts
GROUP BY mem_id, account, sub_account
HAVING COUNT(*) > 1 )
我最終使用的查詢大部分都是這樣的;
SELECT a.* from accounts a
JOIN
(
SELECT *, MIN(updated_at) min_date
FROM accounts
GROUP BY mem_id, account, sub_account
HAVING COUNT(*) > 1
) b
ON
a.mem_id = b.mem_id
AND
a.account = b.account
AND
a.sub_account = b.sub_account
AND
a.updated_at = b.min_date
基本上是進行自updated_at
以獲取每個分組的最小值updated_at
,然后根據有關行的不同信息來匹配行。 在我的情況下,每個條目只有1個重復項,因此這可能不適用於涉及多個重復項的情況。 然后,我只是使用該清單來刪除需要刪除的帳戶。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.