Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用SQL Server获取最后一个子id_Sql_Sql Server - Fatal编程技术网

如何使用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