如何在WHERE语句中筛选各用户最新pkg_date对应的ID及package?
提取每个用户最新package记录的WHERE语句实现
针对你的数据集,要获取每个Name对应最新pkg_date的记录(Ann的20220205行、Lima的20220208行),可以用以下两种WHERE语句的实现方式:
方法一:使用IN子查询匹配用户-最新日期组合
SELECT ID, Name, pkg_date, package FROM your_table WHERE (Name, pkg_date) IN ( SELECT Name, MAX(pkg_date) FROM your_table GROUP BY Name );
逻辑说明:先通过子查询按Name分组,算出每个用户的最新pkg_date;主查询的WHERE条件直接匹配Name和对应最新日期的组合,筛选出目标记录。
方法二:关联子查询匹配单用户最新日期
如果你的SQL环境不支持行构造器(即(Name, pkg_date) IN这种写法),可以用这种关联子查询的方式:
SELECT ID, Name, pkg_date, package FROM your_table t1 WHERE pkg_date = ( SELECT MAX(pkg_date) FROM your_table t2 WHERE t2.Name = t1.Name );
逻辑说明:对主表的每一行t1,子查询会找到同Name下的最大pkg_date,当t1的pkg_date等于这个最大值时,该行就会被选中。
两种方法最终都会返回以下结果:
| ID | Name | pkg_date | package |
|---|---|---|---|
| 11 | Ann | 20220205 | R |
| 22 | Lima | 20220208 | A |
内容的提问来源于stack exchange,提问作者dspassion
相关产品推荐
相关产品推荐

