如果我理解你的話,這會返回你所要求的。
DECLARE @tmp TABLE
(
numVal INT PRIMARY KEY
);
INSERT @tmp
VALUES
(1)
,(5)
,(10)
,(15)
,(20)
,(40)
,(45)
,(50)
,(55)
,(60)
,(65)
,(70);
;WITH breaks AS
(
SELECT
t.numval breakMax
, ROW_NUMBER()
OVER(
ORDER BY t.numval
) breakGroup
FROM
@tmp t
WHERE
NOT EXISTS
(
SELECT
NULL
FROM
@tmp t1
WHERE
t1.numVal > t.numVal
AND
t1.numVal <= t.numVal + 7
)
)
SELECT
v.breakGroup
, MIN(v.numval) secondNum
, MAX(v.numVal) secondLastNum
FROM
(
SELECT
t.numVal
, br.breakGroup
, ROW_NUMBER()
OVER(
PARTITION BY
br.breakGroup
ORDER BY
t.numval
) ar
, ROW_NUMBER()
OVER(
PARTITION BY
br.breakGroup
ORDER BY
t.numval DESC
) dr
FROM
@tmp t
CROSS APPLY
(
SELECT
TOP 1
breakGroup
FROM
breaks b
WHERE
b.breakMax >= t.numVal
ORDER BY
b.breakGroup
) br
) v
WHERE
v.ar = 2
OR
v.dr = 2
GROUP BY
v.breakGroup
添加了更多我的問題。謝謝你的回答,偉大的幫助 – batman
不要擔心它,正在犯一個愚蠢的錯誤。所有好夥伴。萬分感謝。 – batman