查询以在特定条件下通过重置递增计数

时间:2018-06-20 18:25:52

标签: sql postgresql

考虑具有以下架构的表:

device_id VARCHAR
date      DATE
visited   BOOLEAN

让我们说表中的数据涵盖了30天的时间段,每device_id将有30行,每月的每一天都有一个(因此,如果我们有10台设备,将有10x30 = 300行)。

我需要编写一个查询,其中结果集将包含一个名为age的附加整数字段,其中age的计算方式如下:如果visitedTRUE,然后应将age设置为0。对于给定的device_id的其他行,age应该每天连续增加1。因此结果应如下所示:

device_id   date         visited     age
aaaa        2018/05/01    True       0
aaaa        2018/05/02    False      1
aaaa        2018/05/03    False      2
aaaa        2018/05/04    False      3
aaaa        2018/05/05    False      4
aaaa        2018/05/06    True       0
aaaa        2018/05/07    False      1
aaaa        2018/05/08    False      2
aaaa        2018/05/09    False      3
aaaa        2018/05/10    False      4
...
aaaa        2018/05/31    False     15
bbbb        2018/05/01    True       0
...

我一直在尝试使用窗口函数对记录进行排名,但是实际上没有一致的分区可以对它们进行排名。我觉得我缺少明显的东西。感谢您的协助。

1 个答案:

答案 0 :(得分:1)

您可以使用窗口mort_tab在device_id和mort_rate / mort_tab(1.,9.)中准备组:

SUM

{{3}}