SQL按最大值选择组
有人能给我一个select语句,只检索每个用户具有最高(最大)年份的行吗SQL按最大值选择组,sql,sql-server,group-by,Sql,Sql Server,Group By,有人能给我一个select语句,只检索每个用户具有最高(最大)年份的行吗 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
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.
…所以我想要的结果集是:
Year User_ID Name City
===== ======= ==== =====
2003 1 Bob St Paul
2010 2 Mary L.A.
因为您没有提到任何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
但是,如果RDBMS支持窗口函数,则可以使用ROW\u NUMBER()
因为您没有提到任何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
但是,如果RDBMS支持窗口函数,则可以使用ROW\u NUMBER()
因为您没有提到任何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
但是,如果RDBMS支持窗口函数,则可以使用ROW\u NUMBER()
因为您没有提到任何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
但是,如果RDBMS支持窗口函数,则可以使用ROW\u NUMBER()
不是我所知道的最好的,但很简单
不是我所知道的最好的,但很简单
不是我所知道的最好的,但很简单
这不是我所知道的最好的,但很简单这应该有用:
SELECT MAX( Year ) Year, User_id, Name
FROM tableName
GROUP BY User_id, Name
这应该起作用:
SELECT MAX( Year ) Year, User_id, Name
FROM tableName
GROUP BY User_id, Name
这应该起作用:
SELECT MAX( Year ) Year, User_id, Name
FROM tableName
GROUP BY User_id, Name
这应该起作用:
SELECT MAX( Year ) Year, User_id, Name
FROM tableName
GROUP BY User_id, Name
如果您告诉我们您正在使用的数据库,我可能会推荐一个稍微好一点的查询,但是这个查询很简单,应该适用于大多数数据库:
SELECT MAX(year), user_id, name
FROM myTable
GROUP BY user_id, name
如果您告诉我们您正在使用的数据库,我可能会推荐一个稍微好一点的查询,但是这个查询很简单,应该适用于大多数数据库:
SELECT MAX(year), user_id, name
FROM myTable
GROUP BY user_id, name
如果您告诉我们您正在使用的数据库,我可能会推荐一个稍微好一点的查询,但是这个查询很简单,应该适用于大多数数据库:
SELECT MAX(year), user_id, name
FROM myTable
GROUP BY user_id, name
如果您告诉我们您正在使用的数据库,我可能会推荐一个稍微好一点的查询,但是这个查询很简单,应该适用于大多数数据库:
SELECT MAX(year), user_id, name
FROM myTable
GROUP BY user_id, name
您可以通过分组获得结果,请参见下面的示例
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.')
您可以使用此查询选择like
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
您可以通过分组获得结果,请参见下面的示例
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.')
您可以使用此查询选择like
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
您可以通过分组获得结果,请参见下面的示例
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.')
您可以使用此查询选择like
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
您可以通过分组获得结果,请参见下面的示例
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.')
您可以使用此查询选择like
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
子查询将精确返回1年。所以这甚至是不对的。1年是每个名字的第一年。这不是他想要的吗?我在一个样本表上测试了它,我碰巧有一个样本表,它对meTOP有效,但并非所有数据库都支持它。你知道OP使用的是什么数据库吗?非常真实的Racil,我想我没有使用sql server。另外,我在示例中添加了另一个字段,它似乎在结果集中添加了一行我不想添加的行(每个用户的两个城市)子查询将精确返回1年。所以这甚至是不对的。1年是每个名字的第一年。这不是他想要的吗?我在一个样本表上测试了它,我碰巧有一个样本表,它对meTOP有效,但并非所有数据库都支持它。你知道OP使用的是什么数据库吗?非常真实的Racil,我想我没有使用sql server。另外,我在示例中添加了另一个字段,它似乎在结果集中添加了一行我不想添加的行(每个用户的两个城市)子查询将精确返回1年。所以这甚至是不对的。1年是每个名字的第一年。这不是他想要的吗?我在一个样本表上测试了它,我碰巧有一个样本表,它对meTOP有效,但并非所有数据库都支持它。你知道OP使用的是什么数据库吗?非常真实的Racil,我想我没有使用sql server。另外,我在示例中添加了另一个字段,它似乎在结果集中添加了一行我不想添加的行(每个用户的两个城市)子查询将精确返回1年。所以这甚至是不对的。1年是每个名字的第一年。这不是他想要的吗?我在一个样本表上测试了它,我碰巧有一个样本表,它对meTOP有效,但并非所有数据库都支持它。你知道OP使用的是什么数据库吗?非常真实的Racil,我想我没有使用sql server。另外,我在示例中添加了另一个字段,这似乎在结果集中添加了一行我不想添加的行-每个用户的两个城市)也必须按名称分组,但耶分组始终有效也必须按名称分组但耶分组始终有效也必须按名称分组但耶分组始终有效也必须按名称分组但耶分组始终有效我知道我相信你可以在主查询中执行窗口功能,而不是子查询。我相信你可以在主查询中执行窗口功能,而不是子查询。我相信你可以在主查询中执行窗口功能,而不是子查询。我相信你可以在主查询中执行窗口功能,而不是子查询。城市没有输出将使用此SELECT语句生成。@JohnH如果您对旧线程进行注释,请至少先仔细阅读该线程。在OP编辑问题并添加城市之前,我发布了我的答案。这同样适用于这个问题的大多数其他答案。对不起,如果我知道的话,我不会添加注释或向下箭头。我可以撤消向下箭头,但前提是您的答案已编辑。也许是关于“城市”栏是如何在原始答案发布后添加的?谢谢。@JohnH你为什么要这样做?有人雇你来调查这件事吗?你知道这是怎么回事吗?OP提出了一个问题,我们回答了,答案是正确的。OP不能在那之后去改变问题,因为它使答案错误,这对那些花时间免费帮助的人是不公平的。OP应该发布一个新问题。我看不出有必要写这张便条,任何人都能看清楚。谢谢你投下无知的一票。下次请仔细阅读。此SELECT语句不会生成城市的输出。@JohnH如果您对旧线程进行评论,请至少先仔细阅读该线程。在OP编辑问题并添加城市之前,我发布了我的答案。这同样适用于大多数o