如何使用SQL Server获取最后一个子id
我有一个表,有两列如何使用SQL Server获取最后一个子id,sql,sql-server,Sql,Sql Server,我有一个表,有两列MainID和ChildId 我的桌子: MainID ChildId ------------------------------- 1 1 1 2 1 3 2 1 2 2 3 1 4
MainID
和ChildId
我的桌子:
MainID ChildId
-------------------------------
1 1
1 2
1 3
2 1
2 2
3 1
4 1
4 2
5 1
5 2
5 3
5 4
我只想为每个MainId
选择最后一个子Id:
MainID ChildId
------------------------------
1 3
2 2
3 1
4 2
5 4
为此,我尝试使用Top(1)
,但它只返回一行:
SELECT TOP (1)
MainId, ChildId
FROM
MYTABLE
ORDER BY
ChildId DESC
您需要带领带的
top 1
SELECT TOP (1) with ties MainId, ChildId
FROM MYTABLE
ORDER BY row_number() over (partition by MainId order by ChildId desc)
此外,在这种情况下,您不能仅按ChildId排序,因为
top
中的所有值必须相同。因此,您需要行号
您需要带领带的前1名
SELECT TOP (1) with ties MainId, ChildId
FROM MYTABLE
ORDER BY row_number() over (partition by MainId order by ChildId desc)
此外,在这种情况下,您不能仅按ChildId排序,因为
top
中的所有值必须相同。因此,您需要行号
如果最后一个孩子的id最大,您可以执行以下操作:
SELECT TOP (1) WITH TIES MainId, ChildId
FROM MYTABLE
ORDER BY ROW_NUMBER() OVER (PARTITION BY MainId ORDER BY ChildId DESC);
还有其他方法可以通过子查询来实现这一点,而在ORDER BY
中使用窗口函数最初并不直观
我应该注意,这是特定于SQL Server的,但不是因为
orderby
子句中的ROW\u NUMBER()
。SQL Server支持带有TIES的TOP(n),其他数据库中没有相应的功能。如果最后一个子项是id最大的子项,则可以执行以下操作:
SELECT TOP (1) WITH TIES MainId, ChildId
FROM MYTABLE
ORDER BY ROW_NUMBER() OVER (PARTITION BY MainId ORDER BY ChildId DESC);
还有其他方法可以通过子查询来实现这一点,而在ORDER BY
中使用窗口函数最初并不直观
我应该注意,这是特定于SQL Server的,但不是因为orderby
子句中的ROW\u NUMBER()
。SQL Server支持带TIES的TOP(n),其他数据库中没有相应的功能。请尝试以下操作:
select MainId,
MAX(ChildId)
from MY_TABLE
group by MainId
试试这个:
select MainId,
MAX(ChildId)
from MY_TABLE
group by MainId