作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
使用 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/
我是一名优秀的程序员,十分优秀!