我有一个关于MySQL窗口的问题
SELECT
Client,
User,
Date,
Flag,
lag(Date) over (partition by Client,User order by Date asc) as last_date,
lag(Flag) over (partition by Client,User order by Date asc) as last_flag,
case when Flag = 1 and last_flag = 1 then 1 else 0 end as consecutive
FROM db.tbl
这个查询返回如下所示的内容:我试图计算出每个用户最近的Flag列连续为1的次数,如果他们有11110000111,那么我们应该取最后三次出现的1来确定他们有连续3次的标志。
我需要提取连续标志的开始和结束日期。
我该怎么做呢,有没有人能帮我:)
如果我们使用11110000111的示例,则应仅提取111,因此该客户的3个最近日期。因此,在下面的示例中,我们需要将10.01.2023作为第一个日期,将24.01.2023作为最后一个日期。连续计数应为3
输出:
2条答案
按热度按时间b0zn9rqh1#
使用聚合函数和字符串函数:
另一个具有窗口函数和条件聚集的解决方案:
请参见demo。
oknwwptz2#
尝试使用更简单的查询来获得结果,下面是我利用lastDate和lastFlag列的方法。
运行here
原始表没有
LastDate
和LastFlag
列,是使用OP的初始查询创建的。由于所使用的方法没有得到明显的支持,但我得到的印象是,OP不知何故设法做到这一点,在他们的一方。
因此,可以在包含该查询的
eTT
之前添加另一个称为tt
的cte。