我在这里敲我的头。我觉得很愚蠢,因为我确定我以前做过这样的事情,但不能为我的生活记住如何。其中一天我猜>。<
说我有以下数据:--->和一个返回此的查询:--->但我想要这个:
ID FirstID ID FirstID ID FirstID
-- ------- -- ------- -- -------
1 1 1 1 7 1
2 1 3 3 3 3
3 3 4 4 6 4
4 4 5 5 5 5
5 5
6 4
7 1
请注意,我的查询返回ID = FirstID的记录,但我希望它返回唯一FirstID的每个子集的Max(ID)。听起来很简单吧?这就是我的想法,但我一直在追回记录#7。这是我的查询(返回上面第二块图的那个)和一些测试代码,让您的生活更轻松。我需要这个给我最右边的块结果。应该注意,这是一个自连接表,其中FirstID是ID的外键。谢谢:))
declare @MyTable table (ID int, FirstID int)
insert into @MyTable values (1,1),(2,1),(3,3),(4,4),(5,5),(6,4),(7,1)
select ID, FirstID
from @MyTable
where ID = FirstID
答案 0 :(得分:4)
这是否有效
declare @MyTable table (ID int, FirstID int)
insert into @MyTable values (1,1),(2,1),(3,3),(4,4),(5,5),(6,4),(7,1)
Select FirstID, Max (Id) ID
From @MyTable
Group BY FirstID
结果
FirstID ID
----------- -----------
1 7
3 3
4 6
5 5
答案 1 :(得分:1)
使用SQL2005及更高版本的SQL2008版本,SQL Server中的聚合函数已得到改进
您可以使用PARTITION BY子句,例如MAX,MIN,SUM,COUNT函数
请尝试以下示例
select
Distinct FirstID, Max(ID) OVER (PARTITION BY FirstID) MaxID
from @MyTable
您可以在http://www.kodyaz.com/t-sql/sql-count-function-with-partition-by-clause.aspx
找到示例根据您的评论,我修改了相同的查询,只是为了按行和列的顺序提供确切的输出,如下所示
select Distinct
Max(ID) OVER (PARTITION BY FirstID) ID,
FirstID
from @MyTable
order by FirstID