【发布时间】:2019-11-09 12:33:00
【问题描述】:
使用 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 专家 :-) 在此先感谢
【问题讨论】:
-
对于 MySQL,最好知道您正在使用的版本。最近发生了重要的变化。在 MySQL 8 中,有些事情比以前的版本更容易实现。
-
表中的同名可以有两个不同的national_id吗?如果是这样,您是想要姓名一个结果行还是每个姓名和national_id 一个结果行?
-
谢谢@ThorstenKettner。 MySQL 版本是 5.7.25。不,表中的同名不能有两个不同的national_id。
-
那么是时候修复数据库设计了。一张供有国民身份证的人使用,一张供订阅者使用。
标签: mysql sql phpmyadmin