当前位置: 首页 > 面试题库 >

SQL Server GROUP COUNT个仅连续行

段干飞翔
2023-03-14
问题内容

我在Microsoft SQL Server 2008
R2上有一个名为DATA的表,具有三个不可为空的整数字段:ID,Sequence和Value。具有相同ID的序列值将是连续的,但可以以任何值开头。我需要一个查询,该查询将返回具有相同ID和值的连续行的计数。

例如,假设我有以下数据

ID  Sequence  Value
--  --------  -----
1         1      1
5         1    100
5         2    200
5         3    200
5         4    100
10       10     10

我想要以下结果:

ID  Start  Value  Count
--  -----  -----  -----
1      1      1      1
5      1    100      1
5      2    200      2
5      4    100      1
10    10     10      1

我试过了

SELECT ID, MIN([Sequence]) AS Start, Value, COUNT(*) AS [Count]
 FROM DATA
 GROUP BY ID, Value
 ORDER BY ID, Start

但这给了

ID  Start  Value  Count
--  -----  -----  -----
1      1      1      1
5      1    100      2
5      2    200      2
10    10     10      1

它将所有具有相同值的行组合在一起,而不仅仅是连续的行。

有任何想法吗?从我所看到的情况来看,我相信我必须使用ROW_NUMBER()在连续的行中将表与其自身保持连接,但是我不确定如何从中获得计数。

提前致谢。


问题答案:

您可以Sequence - ROW_NUMBER() OVER (ORDER BY ID, Val, Sequence) AS g用来创建一个组:

SELECT
  ID,
  MIN(Sequence) AS Sequence,
  Val,
  COUNT(*) AS cnt
FROM
(
  SELECT
    ID,
    Sequence,
    Sequence - ROW_NUMBER() OVER (ORDER BY ID, Val, Sequence) AS g,
    Val
  FROM
    yourtable
) AS s
GROUP BY
  ID, Val, g


 类似资料:
  • 我想知道是否还有其他人在ble连接仅持续10秒时遇到问题。我正在尝试将mac(运行ubuntu)连接为中心,将iPhone应用程序连接为外围设备。我已验证该应用程序可与lightblue连接。我正在使用hcitool lescan获取MAC地址,然后使用gatttool-b-I-t random,这会给我[][MAC地址] HCI嗅探器-蓝牙数据包分析器ver 2.2设备:hci0snap_len

  • 我有一个Azure Web作业,其中包含一些blob触发的函数。我通过门户上的添加作业对话框将其上传到Azure,并将其设置为“连续运行”预期的行为是,任何时候将blob添加 /modifiedblob中指定的容器都会触发调用相应的函数。但是这不会发生。 触发这些功能的唯一方法(在上传blobs之后)是停止web作业并再次重启它。 每次我重启作业时,这些功能似乎都被触发了,而且只触发了一次。任何后

  • 我需要使用FFMPEG随机选择时间(例如0:10),并将两个连续的帧保存为PNG。 产出: 问题 如何确定下一帧?帧率120/1意味着每秒120帧? 编辑 它能保证下一帧吗?还有其他办法吗?

  • 这是我的代码: 它抛出以下错误: 致命错误:未捕获的PDOExc0019: SQLSTATE[HY000]:常规错误: 2014当其他未缓冲的查询处于活动状态时,无法执行查询。考虑使用PDO语句::fetchAll()。或者,如果您的代码只针对mysql运行,您可以通过设置PDO::MYSQL_ATTR_USE_BUFFERED_QUERY属性来启用查询缓冲。--plhd--3/>(71): PD

  • 问题内容: 我正在尝试创建一个列(“ consec”),该列将连续计数另一个(“二进制”)中的连续值,而不使用循环。这是预期的结果: 但是这个 导致… 我看到了其他使用分组或排序的帖子,但不幸的是,我看不到如何对我有用。在此先感谢您的帮助。 问题答案: 您可以使用compare-cumsum-groupby模式(我 确实 需要解决这个问题才能编写文档),最后是: 之所以有效,是因为首先我们得到了要

  • 如果将块分配给文件,使得文件的所有逻辑块都得到硬盘中的连续物理块,则这种分配方案被称为连续分配。 在下面显示的图像中,目录中有三个文件。 表中提到了起始块和每个文件的长度。 我们可以在表格中检查连续块是否按照需要分配给每个文件。 优点 实现起来很简单。 可获得优秀的读取性能。 支持随机访问文件。 缺点 磁盘将变成碎片。 文件增长可能很困难。