【问题标题】:How to get max year from a column and keep the rest?如何从列中获取最大年份并保留其余部分?
【发布时间】:2021-06-15 00:02:33
【问题描述】:

对不起,如果这很明显,但我对 SQL 真的很陌生。 我的数据是这样的

Policy Email Years
Pol1 John@gmail 1
Pol1 John@gmail 1
Pol1 Jo@aol. 5
Pol1 Jo@aol. 6

我如何获得它来提取每项政策的数据,但只提取每项政策的最高年份的数据。所以第 2 行和第 4 行

【问题讨论】:

    标签: sql greatest-n-per-group


    【解决方案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);
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2022-12-10
          • 2012-01-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多