sql - T-Sql 对多行的字符串序列进行计数

标签 sql gaps-and-islands

如何在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/

相关文章:

sql - MySQL Workbench 无法在 ubuntu 上打开

MySQL查询以获取最常出现的最长文本

php - 无法获取当前日期的记录

MySQL 在不加入临时表的情况下使用 GROUP BY DATE(table.timestamp) 时填写缺失的日期

sql - 组顺序整数postgres

sql - SET NOCOUNT ON 使用情况

sql - 基于多列之一进行连接

sql - 查找序列中未缺失的列中的上一个数字

sql - 我如何从 Hiveql 中的 select over 语句中仅提取最近一周?

SQL Server - 通过标志总结日期