繁体   English   中英

SQL - 查找事件序列

[英]SQL - Finding sequence of events

我需要一些帮助来识别SQL Server 08 R2中的一系列事件。 这是样本数据:

    ID | SampleTime | SampleValue | CycleNum
    1  | 07:00:00   | 10          |
    2  | 07:02:00   | 10          |
    3  | 07:05:00   | 10          |
    4  | 07:12:00   | 20          |
    5  | 07:15:00   | 10          |
    6  | 07:22:00   | 10          |
    7  | 07:23:00   | 20          |
    8  | 07:30:00   | 20          |
    9  | 07:31:00   | 10          |  

我已经使用以下作为指南, 链接 ,但它没有提供所需的输出

规则是:

  • 一个周期从10开始,到20结束
  • 在20之前可以有多个10,在接下来的10之前可以有多个20
  • 一个循环将始终从前10个开始,并在下一个10之前的最后20个循环结束。

示例输出

    ID | SampleTime | SampleValue | CycleNum
    1  | 07:00:00   | 10          |  1
    2  | 07:02:00   | 10          |  1
    3  | 07:05:00   | 10          |  1
    4  | 07:12:00   | 20          |  1
    5  | 07:15:00   | 10          |  2
    6  | 07:22:00   | 10          |  2
    7  | 07:23:00   | 20          |  2
    8  | 07:30:00   | 20          |  2
    9  | 07:31:00   | 10          |  3

测试表

CREATE TABLE myTable (ID INT IDENTITY, SampleTime DATETIME, SampleValue INT, CycleNum INT)
INSERT INTO myTable (SampleTime, SampleValue)
VALUES ('07:00:00',10),
       ('07:02:00',10),
       ('07:05:00',10),
       ('07:12:00',20),
       ('07:15:00',10),
       ('07:22:00',10),
       ('07:23:00',20),
       ('07:30:00',20),
       ('07:31:00',10)

试试这个...这将给出ID和CYCLENUM的映射

WITH EVE_DATA AS (
  SELECT ID
    , SAMPLETIME
    , SAMPLEVALUE
    , CASE 
        WHEN (SAMPLEVALUE - lag(SAMPLEVALUE, 1, 0) over (order by SAMPLETIME ASC)) = -10
        THEN 1
        ELSE 0
    END AS START_IND
  FROM
  MY_TABLE
)
SELECT T1.id
  , SUM(T2.START_IND) + 1 AS CycleNum 
FROM EVE_DATA T1
  JOIN EVE_DATA T2
    ON T1.ID >= T2.ID
GROUP BY T1.ID
ORDER BY T1.ID;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM