gpt4 book ai didi

sql-server - 如何不在行上而是在行组上使用 OFFSET/FETCH?

转载 作者:行者123 更新时间:2023-12-03 19:58:18 25 4
gpt4 key购买 nike

如果我有一个如下的一对多表:

FamilyId          UserId
1 1
1 2
2 3
2 4
3 5

我可以用 offset/fetch获取一组行。但是我怎样才能用它来获得一组家庭呢?我该怎么办 fetch例如,前两个系列(在本例中总共返回 4 行)使用 offset/fetch ?

最佳答案

我知道这是一个老问题,但我刚刚遇到它,并想建议使用 DISTINCT 和 TOP 的更短且希望更优雅的解决方案。

SELECT *
FROM yourTable
WHERE FamilyId IN
(SELECT DISTINCT TOP (2) FamilyId FROM yourTable)

另一种方法是使用 DENSE_RANK 函数,例如
SELECT FamilyId, UserId
FROM (SELECT DENSE_RANK() OVER (ORDER BY FamilyId) AS rn, FamilyId, UserId FROM yourTable) AS t
WHERE rn < 3

如果由于某种原因,必须使用 OFFSET..FETCH,那么以下解决方案是可行的,使用定义要返回的记录数的变量:
DECLARE @intFamilyRowCnt INT 
SET @intFamilyRowCnt =
(
SELECT COUNT(FamilyId) FROM yourTable WHERE FamilyId IN
(SELECT DISTINCT TOP (2) FamilyId FROM yourTable)
)

SELECT * FROM yourTable
ORDER BY FamilyId
OFFSET 0 ROWS FETCH NEXT @intFamilyRowCnt ROWS ONLY

关于sql-server - 如何不在行上而是在行组上使用 OFFSET/FETCH?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28375807/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com