【发布时间】:2017-05-15 02:01:25
【问题描述】:
我有一个包含两列的表格,例如:
CREATE TABLE actions (
action_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
"action" text NOT NULL
);
以及其中的以下数据:
action_time | action
----------------------------+--------
2016-12-30 14:12:33.353269 | a
2016-12-30 14:12:38.536818 | b
2016-12-30 14:12:43.305001 | a
2016-12-30 14:12:49.432981 | a
2016-12-30 14:12:53.536397 | b
2016-12-30 14:12:57.449101 | b
2016-12-30 14:13:01.592785 | a
2016-12-30 14:13:06.192907 | b
2016-12-30 14:13:11.249181 | b
2016-12-30 14:13:13.690897 | b
(10 rows)
您可以假设 action_time 列中没有重复值。
我如何计算从上一个操作开始连续执行的相同操作的数量?
连续相同动作的数量没有限制,任何动作都可以是最后一个。此外,对不同动作的种类没有限制:我只使用了两个来简化示例数据。
对于这个示例数据,我希望结果为 3。这是因为最后一个操作是“b”,并且连续发生了 3 次。
我认为结合窗口函数和WITH RECURSIVE子句可以实现解决方案,但我不知道该怎么做。
【问题讨论】:
标签: sql postgresql window-functions gaps-and-islands postgresql-9.6