stc*_*flw 3 sql t-sql sql-server algorithm
我有一个SQL表,只包含1列
Column Name
A
A
A
B
B
B
B
C
D
D
E
Run Code Online (Sandbox Code Playgroud)
我需要一个返回切割点的SQL代码.对于上表,它将返回:
Column Name
3
7
8
10
11
Run Code Online (Sandbox Code Playgroud)
3是A的末尾,7是B的末尾,8是C的末尾,依此类推......
让我们看看你能想出什么:=)
Lie*_*ers 16
假设数据可以在您的数据上排序Column,计划是row number为每一行生成一个并执行a group by检索您的数据点.
DECLARE @YourTable TABLE (Col VARCHAR(1))
CREATE TABLE #TempTable (ID INTEGER IDENTITY(1, 1), Col VARCHAR(1))
SET IDENTITY_INSERT #TempTable OFF
INSERT INTO @YourTable (Col) VALUES ('A')
INSERT INTO @YourTable (Col) VALUES ('A')
INSERT INTO @YourTable (Col) VALUES ('A')
INSERT INTO @YourTable (Col) VALUES ('B')
INSERT INTO @YourTable (Col) VALUES ('B')
INSERT INTO @YourTable (Col) VALUES ('B')
INSERT INTO @YourTable (Col) VALUES ('B')
INSERT INTO @YourTable (Col) VALUES ('C')
INSERT INTO @YourTable (Col) VALUES ('D')
INSERT INTO @YourTable (Col) VALUES ('D')
INSERT INTO @YourTable (Col) VALUES ('E')
INSERT INTO #TempTable
SELECT *
FROM @YourTable
ORDER BY Col
SELECT MAX(ID)
FROM #TempTable
GROUP BY Col
DROP TABLE #TempTable
Run Code Online (Sandbox Code Playgroud)
DECLARE @Table TABLE (Col VARCHAR(1))
INSERT INTO @Table VALUES ('A')
INSERT INTO @Table VALUES ('A')
INSERT INTO @Table VALUES ('A')
INSERT INTO @Table VALUES ('B')
INSERT INTO @Table VALUES ('B')
INSERT INTO @Table VALUES ('B')
INSERT INTO @Table VALUES ('B')
INSERT INTO @Table VALUES ('C')
INSERT INTO @Table VALUES ('D')
INSERT INTO @Table VALUES ('D')
INSERT INTO @Table VALUES ('E')
SELECT MAX(RowNumber)
FROM (SELECT RowNumber = ROW_NUMBER() OVER (ORDER BY Col), Col
FROM @Table) t
GROUP BY Col
Run Code Online (Sandbox Code Playgroud)