sql - 一个简单但具有挑战性的 SQL 问题,至少我找不到出路,只能在外部进行 (c#)

标签 sql sql-server algorithm tsql

我有一个只包含 1 列的 SQL 表

Column Name
A 
A
A
B
B
B
B
C
D
D
E

我需要一个返回切点的 SQL 代码。对于上表,它将返回:

Column Name
    3
    7
    8
    10
    11

3 是 A 的结尾,7 是 B 的结尾,8 是 C 的结尾,依此类推...

让我们看看你能想出什么:=)

最佳答案

假设数据可以在您的上排序,计划是为每一行生成一个行号并进行分组检索您的数据点。

SQL Server 2000

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

SQL 服务器 2005

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

关于sql - 一个简单但具有挑战性的 SQL 问题,至少我找不到出路,只能在外部进行 (c#),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2155553/

相关文章:

python - 如何找到列表中不一定相邻的最大连续数字集?

sql - 将列转换为行

c# - 如何将右侧 "where"传递给 C# 中的 IQueryable 实例化?

c# - SQL Server - 将 tinyint 与枚举一起使用

algorithm - 实现最长公共(public)子序列的并行算法

java - 这种获取排序列表中最接近数字的方法是否最有效?

sql - 如何在 sql server 2008 中为多对多关系生成嵌套 XML?

mysql - 计算 2 个不同表中 2 行之间的不匹配数 - MySQL

sql - 将两个 SELECT 查询合并为一个

mysql - 将SQL查询结果插入Excel