gpt4 book ai didi

mysql - 显示 WHERE IN 子句 SQL 中每条记录的最大日期

转载 作者:行者123 更新时间:2023-11-29 09:30:51 25 4
gpt4 key购买 nike

使用 MySQL,我有一个名为 subscriptions 的表,如下所示

name,   renewal_date,    national_id
---------------------------------------
ted, 1/2/2010, A1111R
ben, 1/3/2010, A145E1
bob, 8/4/2009, A11C11
kate, 2/2/2010, A111E1
ted, 12/2/2011, A1111R
bob, 12/2/2014, A11C11
ben, 12/2/2016, A145E1

etc..

该表大约有 150000 条记录。每个人可以有多个订阅。我想显示给我查询的列表中每条记录的最大/最新renewal_date。这是我的sql语句:

select d.name, d.renewal_date, d.national_id
from subscriptions d
where renewal_date= (select max(d1.renewal_date)
from subscriptions d1
where d1.national_id = d.national_id IN ('A1111R','A11C11', 'A145E1' ....));

当我在 phpmyadmin 中运行查询时,即使 IN 子句中的记录很少,它似乎也没有结束执行。

最好的方法是什么?我还应该说我还不是 SQL 专家 :-) 提前致谢

最佳答案

假设给定人员的姓名和国民 ID 没有改变,您可以只使用聚合:

select d.name, max(d.renewal_date), d.national_id
from subscriptions d
where d.national_id in ( . . . )
group by d.name, d.national_id;

如果您想要行上的所有列,最有效的方法通常是具有正确索引的相关子查询:

select s.*
from subscriptions s
where s.national_id in ( . . . ) and
s.renewal_date = (select max(s2.renewal_date)
from subscriptions s2
where s2.national_id = s.nation_id
);

正确的索引是(national_id,renew_date)。实际上,在许多情况下,这可能比 group by 查询更快。

关于mysql - 显示 WHERE IN 子句 SQL 中每条记录的最大日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58779320/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com