SQL Group按顺序排序,同时满足高级条件

时间:2015-01-19 15:53:45

标签: sql sql-server group-by greatest-n-per-group ranking

给出下表,包含数百万条日志条目。每个日志条目可以是kind = 0(清除)或kind = 1(事件)。清除意味着所有先前事件都得到处理 - 因此可以对它们进行分组(在视图中)。所有后续事件必须按其状态和发生的最新日期进行分组。

WHILE或临时表实际上是一个具有此表大小的解决方案。我调查了sql group by only rows which are in sequence,但无法找到一种方法使其适应给定的问题。

编辑1:重新排列的行以突出显示清除

给定数据表(按RelationId排序,ValidFrom DESC

Id|RelationId|Kind|StatusId| ValidFrom
--------------------------------------
10|         1|   1|      14|2015-01-06
9 |         1|   1|      14|2015-01-05
8 |         1|   1|      15|2015-01-05
7 |         1|   0|      12|2015-01-04 (clearing id 6,4)
6 |         1|   1|      13|2015-01-03 (.. cleared with id 7)
4 |         1|   1|      13|2015-01-02 (.. cleared with id 7)
3 |         2|   1|      19|2015-01-02
1 |         2|   0|      18|2015-01-01 (no clearing)
5 |         3|   0|      18|2015-01-03 (clearing id 2)
2 |         3|   1|      20|2015-01-02 (.. cleared with id 5)
--------------------------------------

下表列出了令人失望的输出。如您所见,事件计数不会考虑清算行。

编辑2:添加了要清除的问题

问题:什么是高效的SQL查询,输出以下结果?

RelationId|StatusId|Count|MaxValidFrom
--------------------------------------
1         |      14|    2|  2015-01-06
1         |      15|    1|  2015-01-05
1         |      12|    2|  2015-01-04
2         |      19|    1|  2015-01-02
3         |      18|    1|  2015-01-03
--------------------------------------

使用的SQL Server是SQL 2008 R2 Enterprise。

感谢您的帮助!

0 个答案:

没有答案