考虑下面的查询;
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。
发布于 2016-06-23 02:20:14
可能是您必须使用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 )发布于 2016-06-23 08:43:51
我最终使用的查询在很大程度上是这样的;
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值,然后根据关于行的不同信息来匹配行。在我的例子中,每个条目只有一个副本,所以这可能不适用于涉及多个副本的情况。然后,我使用该列表删除了需要删除的帐户。
https://stackoverflow.com/questions/37975369
复制相似问题