【发布时间】: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 行
【问题讨论】:
对不起,如果这很明显,但我对 SQL 真的很陌生。 我的数据是这样的
| Policy | Years | |
|---|---|---|
| Pol1 | John@gmail | 1 |
| Pol1 | John@gmail | 1 |
| Pol1 | Jo@aol. | 5 |
| Pol1 | Jo@aol. | 6 |
我如何获得它来提取每项政策的数据,但只提取每项政策的最高年份的数据。所以第 2 行和第 4 行
【问题讨论】:
我看不到您使用的是什么版本的 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
在这里测试:
【讨论】:
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
【讨论】:
关联子查询是一种典型的方法:
select t.*
from t
where t.year = (select max(t2.year) from t t2 where t2.policy = t.policy);
【讨论】: