【发布时间】:2015-06-02 08:49:54
【问题描述】:
我有一个表,其中存储了消息发生时。通常有一条消息“A”,有时 A 被一条消息“B”隔开。 现在我想对这些值进行分组,以便能够分析它们,例如找到最长的“A”条纹或“A”条纹的分布。
我已经尝试过 COUNT-OVER 查询,但它一直在为每条消息计数。
SELECT message, COUNT(*) OVER (ORDER BY Timestamp RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
这是我的示例数据:
Timestamp Message
20150329 00:00 A
20150329 00:01 A
20150329 00:02 B
20150329 00:03 A
20150329 00:04 A
20150329 00:05 A
20150329 00:06 B
我想要以下输出
Message COUNT
A 2
B 1
A 3
B 1
【问题讨论】:
-
那么这里涉及到两列,message和timestamp?
-
有一个timestamp列但是数据还是按顺序存储的。
-
始终将数据视为无序的! (即使它现在看起来是有序的,它也可能在未来发生变化。)永远不要根据隐式顺序编写查询!!!
-
@jarlh 他是按时间戳订购的,那有什么问题?
-
@mcl,只是因为“数据是按顺序存储的”答案。
标签: sql sql-server-2014