如何从列中获取最大年份并保留其余部分?
Posted
技术标签:
【中文标题】如何从列中获取最大年份并保留其余部分?【英文标题】:How to get max year from a column and keep the rest? 【发布时间】:2021-06-15 00:02:33 【问题描述】:对不起,如果这很明显,但我对 SQL 真的很陌生。 我的数据是这样的
Policy | Years | |
---|---|---|
Pol1 | John@gmail | 1 |
Pol1 | John@gmail | 1 |
Pol1 | Jo@aol. | 5 |
Pol1 | Jo@aol. | 6 |
我如何获得它来提取每项政策的数据,但只提取每项政策的最高年份的数据。所以第 2 行和第 4 行
【问题讨论】:
【参考方案1】:我看不到您使用的是什么版本的 SQL,但受这篇文章的启发: SQL Query to get column values that correspond with MAX value of another column?
这是我写的:
select core.policy,
core.email,
core.years
From ExamplePolicies core
Join (SELECT maxYears = MAX(years),
policy
FROM ExamplePolicies
GROUP BY policy) subq
on core.years = subq.maxYears
在这里测试:
https://sqliteonline.com/
【讨论】:
【参考方案2】:SELECT Policy,max(Year) FROM TABLE GROUP BY Policy
此查询将按策略对记录进行分组,并从每个组中选择 MAX of year。如果您只需要 Policy 和 Year 那么上面的查询应该没问题。因为您无法选择 group by 查询中的任何其他列。
如果您还想要结果中的其他列,那么您可以尝试以下查询。
SELECT
T1.*
FROM
TABLE T1
INNER JOIN
( SELECT Policy,max(Year) as [MaxYear] FROM TABLE GROUP BY Policy ) T2
ON
T1.Polcy = T2.Policy AND T1.Year = T2.MaxYear
【讨论】:
【参考方案3】:关联子查询是一种典型的方法:
select t.*
from t
where t.year = (select max(t2.year) from t t2 where t2.policy = t.policy);
【讨论】:
以上是关于如何从列中获取最大年份并保留其余部分?的主要内容,如果未能解决你的问题,请参考以下文章