当序列顺序与日期时间顺序不匹配时,如何对行进行排序?

时间:2019-07-17 21:27:27

标签: sql-server session sequence teradata

我正在尝试对事件数据进行会话化,并发现一个导致查询中断的情况。

我有大约1300台机器,每天产生约25万个事件。每台机器报告一个EventCode,SequenceNumber(0到255),DateTime(精确到秒),InAmount,OutAmount,RoundsCount。

我当前的代码使用DateTime排序的LEAD(),LAG()函数来确定会话的开始和结束时间。我发现的问题是,有时SequenceNumber与DateTime字段的顺序不一致。

示例数据

>     +-----------+----------------+---------------------+----------+-----------+-------------+
>     | EventCode | SequenceNumber |      DateTime       | InAmount | OutAmount | RoundsCount |
>     +-----------+----------------+---------------------+----------+-----------+-------------+
>     |  10051300 |            198 | 2019-06-25 15:22:54 | 16779000 |  14814642 |      142483 |
>     |  10000100 |            182 | 2019-06-25 15:22:58 | 16770950 |  14809091 |      142321 |
>     |  10000901 |            200 | 2019-06-25 15:23:05 | 16779000 |  14814642 |      142483 |
>     |  13328100 |            201 | 2019-06-25 15:23:05 | 16779000 |  14814642 |      142483 |
>     |  13328500 |            202 | 2019-06-25 15:23:05 | 16779000 |  14814642 |      142483 |
>     |  10003505 |            199 | 2019-06-25 15:23:10 | 16779000 |  14814642 |      142483 |
>     |  10003503 |            204 | 2019-06-25 15:23:56 | 16779000 |  14814642 |      142483 |
>     +-----------+----------------+---------------------+----------+-----------+-------------+

当数据为ORDER BY DateTime时,SequenceNumber 182和199发生故障。

我需要使用SequenceNumber对数据进行排序,除了SequenceNumber每天从0到255多次,并且并非每个数字都会被报告。

0 个答案:

没有答案