[英]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.