我有一个包含2列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
答案 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
,其他数据库中没有相应的功能。