CREATE TABLE #t1 ( ID int, Furnace_life INT);
INSERT INTO #t1(ID,Furnace_life) VALUES (1,1)
INSERT INTO #t1(ID,Furnace_life) VALUES (2,2)
INSERT INTO #t1(ID,Furnace_life) VALUES (3,3)
INSERT INTO #t1(ID,Furnace_life) VALUES (4,4) ---
INSERT INTO #t1(ID,Furnace_life) VALUES (5,1)
INSERT INTO #t1(ID,Furnace_life) VALUES (6,2)
INSERT INTO #t1(ID,Furnace_life) VALUES (7,3) ---
INSERT INTO #t1(ID,Furnace_life) VALUES (17,1)
INSERT INTO #t1(ID,Furnace_life) VALUES (18,2)
SELECT * FROM #t1 AS t ORDER BY t.ID ASC;
DROP TABLE #t1我想得到从1到下一个1/开始从1到下一个/的最大值。

发布于 2022-07-02 07:17:56
您可以使用下面的脚本。注比记录必须按ID排序!
CREATE TABLE #t2 ( ID int, Furnace_life INT, TopLife INT NULL);
INSERT INTO #t2
(
ID,
Furnace_life,
TopLife
)
SELECT t.ID,t.Furnace_life,
LAG(t.Furnace_life) OVER (ORDER BY t.ID) TopLife
FROM #t1 t
ORDER BY ID
SELECT * FROM #t2 AS t WHERE t.Furnace_life = 1 AND t.TopLife IS NOT NULL
DROP TABLE #t1
DROP TABLE #t2发布于 2022-07-01 17:02:32
如果数据符合要求,则可以使用此代码。
CREATE TABLE #t1 ( ID int, Furnace_life INT);
INSERT INTO #t1(ID,Furnace_life) VALUES (1,1)
INSERT INTO #t1(ID,Furnace_life) VALUES (2,2)
INSERT INTO #t1(ID,Furnace_life) VALUES (3,3)
INSERT INTO #t1(ID,Furnace_life) VALUES (4,4) ---
INSERT INTO #t1(ID,Furnace_life) VALUES (5,1)
INSERT INTO #t1(ID,Furnace_life) VALUES (6,2)
INSERT INTO #t1(ID,Furnace_life) VALUES (7,3) ---
INSERT INTO #t1(ID,Furnace_life) VALUES (17,1)
INSERT INTO #t1(ID,Furnace_life) VALUES (18,2)
CREATE TABLE #TMPTBL (ID INT ,MAX_Furnace_life INT)
SELECT * FROM #t1 AS t ORDER BY t.ID ASC;
DECLARE @Max_Furnace_life INT = 0
DECLARE @MAXID INT = 0
DECLARE @Furnace_life INT
DECLARE @ID INT
DECLARE db_cursor CURSOR FOR
SELECT ID , Furnace_life FROM #t1 AS t ORDER BY t.ID ASC
OPEN db_cursor
FETCH NEXT FROM db_cursor INTO @ID ,@Furnace_life
WHILE @@FETCH_STATUS = 0
BEGIN
IF @Furnace_life < @Max_Furnace_life
BEGIN
INSERT INTO #TMPTBL (ID ,MAX_Furnace_life) VALUES (@MAXID ,@Max_Furnace_life)
SET @Max_Furnace_life = 0
SET @MAXID = 0
END
ELSE
BEGIN
SET @Max_Furnace_life = @Furnace_life
SET @MAXID = @ID
END
FETCH NEXT FROM db_cursor INTO @ID ,@Furnace_life
END
CLOSE db_cursor
DEALLOCATE db_cursor
-- For End Of Records
INSERT INTO #TMPTBL(ID ,MAX_Furnace_life) SELECT TOP 1 * FROM #t1 ORDER BY ID DESC
SELECT * FROM #TMPTBL
DROP TABLE #t1
DROP TABLE #TMPTBL发布于 2022-07-01 17:49:58
这是一个经典的gaps-and-islands 问题。有很多技术。
这里有一个相当简单的例子。
LAG来获取上一行的值。MAX值并按其排序,仅取最高值。WITH PrevValues AS (
SELECT *,
Prev = LAG(t.Furnace_life) OVER (ORDER BY t.ID)
FROM #t1 t
),
Groups AS (
SELECT *,
GroupId = COUNT(CASE WHEN t.Prev = t.Furnace_life THEN NULL ELSE 1 END) OVER (ORDER BY Furnace_life ROWS UNBOUNDED PRECEDING)
FROM PrevValues t
)
SELECT TOP (1)
Highest_Furnace_life = MAX(g.Furnace_life)
FROM Groups g
ORDER BY
Highest_Furnace_life DESC;https://stackoverflow.com/questions/72831509
复制相似问题