简体   繁体   English

SQL选择按最大值分组

[英]SQL Select Group By Max Value

Can someone give me a select statement that would retrieve only the rows with the highest (max) YEAR for each user? 有人可以给我一条select语句,该语句只为每个用户检索YEAR最高(最大)的行吗?

Year    User_ID   Name     City
=====   =======   =====    =====
2001    1         Bob      Mpls
2002    1         Bob      Mpls
2003    1         Bob      St Paul
2005    2         Mary     New York
2010    2         Mary     L.A.

...so the result set I would want is: ...所以我想要的结果集是:

Year    User_ID   Name   City
=====   =======   ====   =====
2003    1         Bob    St Paul
2010    2         Mary   L.A.

Since you did not mention any RDBMS, this query will work on almost all RDBMS. 由于您没有提及任何RDBMS,因此该查询将在几乎所有RDBMS上运行。

SELECT  a.*
FROM    TableName a
        INNER JOIN
        (
            SELECT  Name, MAX(Year) Year
            FROM    TableName 
            GROUP   BY Name
        ) b ON  a.Name = b.Name
                AND a.Year = b.Year

However, if your RDBMS supports window functions, you can use ROW_NUMBER() 但是,如果RDBMS支持窗口功能,则可以使用ROW_NUMBER()

SELECT  Year, User_ID, Name
FROM    
        (
            SELECT  Year, User_ID, Name,
                    ROW_NUMBER() OVER (PARTITION BY Name,
                                        ORDER BY Year DESC) rn
            FROM    TableName
        ) x
WHERE   x.rn = 1
SELECT * 
  FROM Table a
  WHERE a.Year = (
                    SELECT TOP 1 Year 
                       FROM Table b 
                       WHERE a.name = b.name 
                       ORDER BY year DESC
                  )

not the best i know but simple 我所知道的不是最好的,但很简单

This should work: 这应该工作:

SELECT MAX( Year ) Year, User_id, Name
FROM tableName
GROUP BY User_id, Name

If you tell us the database you're using, I may recommend a slightly better query, but this one is simple and should work in most databases: 如果您告诉我们您正在使用的数据库,我可能会建议一个稍微好一点的查询,但是这个查询很简单,并且可以在大多数数据库中使用:

SELECT MAX(year), user_id, name
FROM myTable
GROUP BY user_id, name

You can acheive the result by group by ,see sample example below .. 您可以按分组获得结果,请参见下面的示例示例。

    create table #temp(year int,id int,name varchar(5),city varchar(20))
insert into #temp values (2001,1,'Bob','Mpls')
insert into  #temp values (2002,1,'Bob','Mpls')
insert into  #temp values  (2003,1,'Bob','St Paul')
insert into  #temp values  (2005,2,'Mary','New York')
insert into  #temp values  (2010,2,'Mary','L.A.')

you can select like using this query 您可以选择使用此查询

 SELECT  t.year,t.id,t.Name,t.city
FROM    #temp t
        INNER JOIN
        (
            SELECT  Name, MAX(Year) Year
            FROM    #temp 
            GROUP   BY Name
        ) a ON  t.Name = a.Name
                AND t.Year = a.Year

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM