首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >查询以在group by中查找最小日期

查询以在group by中查找最小日期
EN

Stack Overflow用户
提问于 2016-06-23 02:09:25
回答 2查看 57关注 0票数 0

考虑下面的查询;

代码语言:javascript
运行
复制
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的预期行为?

示例数据:

代码语言:javascript
运行
复制
(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。

EN

回答 2

Stack Overflow用户

发布于 2016-06-23 02:20:14

可能是您必须使用subselect和另一个group by

代码语言:javascript
运行
复制
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 )
票数 0
EN

Stack Overflow用户

发布于 2016-06-23 08:43:51

我最终使用的查询在很大程度上是这样的;

代码语言:javascript
运行
复制
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值,然后根据关于行的不同信息来匹配行。在我的例子中,每个条目只有一个副本,所以这可能不适用于涉及多个副本的情况。然后,我使用该列表删除了需要删除的帐户。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37975369

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档