假设我们有一个表master
,其中包含列column1
、column2
、column3
和timestamp
以及一个查询
select
column1,
column2,
count(*) as CNT
from
master
group by
column1,
column2
现在,我想对上面的划分进行如下改进:我们按照时间戳从最老到最年轻对每个组进行排序,在我的示例中,每个组必须具有以下形式
column3 | column3 = 'A' | timestamp
X FALSE t1
A TRUE t2
A TRUE t3
Y FALSE t4
Z FALSE t5
A TRUE t6
A TRUE t7
A TRUE t8
A TRUE t9
也就是说,ti > ti+1
,每个组都以FALSE
开始。在查询中,我想进一步将每个组划分为单独的组,如下所示。给定上面的单个示例组,我们应该得到3个组:
一个一个二个一个一个一个三个一个一个一个一个一个四个一个
也就是说,每个组都从一个FALSE
开始,然后是所有连续的TRUE
,直到组中的下一个FALSE
。
1条答案
按热度按时间qmelpv7a1#
如果问题是关于你展示的表格。可以建议以下解决方案。我做了一个类似你的表格:
WITH vars包含两个子查询。如果CASE“A”= FALSE,我将它的值设置为1,否则为0。结果是“case”列。在下面的子查询中,计算“case”的累计和。结果是“total”列。
获取以下数据:
如果我们取消对行“--WHERE total = 1”的注解,我们将得到以下行: