簡體   English   中英

查詢以分組方式查找最短日期

[英]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_atid 因此,我想要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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM