如何在sql中的多行中找到数据子集?
我想在找到另一个字符串之前计算一个字符串(或数字)的出现次数,然后计算在找到另一个字符串之前该字符串出现的次数。
所有这些字符串都可以按随机顺序排列。
这就是我想要实现的目标:
我有一个包含一列( columnx
)的表,其中包含如下数据:
A
A
B
C
A
B
B
我想要的查询结果应该是这样的:
2 A
1 B
1 C
1 A
2 B
这甚至可以在 sql 中实现,还是仅编写一个小 C# 应用程序来执行此操作会更容易?
最佳答案
因为,根据您的评论,您可以添加一列,该列将明确定义 columnx
的顺序。 values go,您可以尝试以下查询(前提是您使用的 SQL 产品支持 CTE 和排名函数):
WITH marked AS (
SELECT
columnx,
sortcolumn,
grp = ROW_NUMBER() OVER ( ORDER BY sortcolumn)
- ROW_NUMBER() OVER (PARTITION BY columnx ORDER BY sortcolumn)
FROM data
)
SELECT
columnx,
COUNT(*)
FROM marked
GROUP BY
columnx,
grp
ORDER BY
MIN(sortcolumn)
;
你可以在工作中看到方法on SQL Fiddle .
如
sortcolumn
是自增整数列,保证没有间隙,可以替换第一个ROW_NUMBER()
仅表达 sortcolumn
.但是,我想,这不能保证一般。此外,您可能确实想要对时间戳而不是整数进行排序。
关于sql - T-Sql 对多行的字符串序列进行计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10007659/