如何使用SQL Server获取最后一个子ID

时间:2018-02-10 12:29:44

标签: sql sql-server

我有一个包含2列MainIDChildId的表格。

我的表:

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

3 个答案:

答案 0 :(得分:2)

您需要top 1 with ties

SELECT     TOP (1) with ties MainId, ChildId
FROM         MYTABLE
ORDER BY row_number() over (partition by MainId order by ChildId desc)

同样在这种情况下,您不能只按ChildId排序,因为top中的所有值必须相同。所以你需要row_number

答案 1 :(得分:2)

试试这个:

select MainId,
       MAX(ChildId)
from MY_TABLE
group by MainId

答案 2 :(得分:1)

如果最后一个孩子是id最大的孩子,你可以这样做:

usersRef.child("users").queryOrdered(byChild: "userName").queryEqual(toValue: "userName like for ex Jone").observeSingleEvent(of: DataEventType.value) { (snapshot) in
    if snapshot.value is NSNull {
       return
    }else{
        for item in snapshot.children {
            print(snapshot.value as! [String: AnyObject])
    }
  }
}

使用子查询还有其他方法可以实现这一点 - 在SELECT TOP (1) WITH TIES MainId, ChildId FROM MYTABLE ORDER BY ROW_NUMBER() OVER (PARTITION BY MainId ORDER BY ChildId DESC); 中使用窗口函数最初并不直观。

我应该注意这是特定于SQL Server的,但不是因为ORDER BY子句中的ROW_NUMBER()。 SQL Server支持ORDER BY,其他数据库中没有相应的功能。