我有一个玩家表作为player1,在那里我想得到的人谁登录在连续第二天的计数。因此,对于我的情况,输出将是2,因为2人连续第二天登录。我尝试了以下方法
select count(*) from (
select player_id from player1
group by player_id
having count(player_id)>1
order by player_id
) a
join player1 b
on a.player_id=b.player_id
and b.log_in_date in (b.log_in_date,(b.log_in_date+1))
但这是得到所有的行那就是9行
2条答案
按热度按时间368yc8dk1#
在Oracle 12和更高版本中,您可以使用
match_recognize
轻松完成此操作:pattern
子句(和define
)中的名称由我们决定(我们创建这些名称的方式与为查询中的表或列给予别名的方式相同)。它们用于将行分类为“first_date”、“same_day”(作为第一个日期)或“next_day”(在初始登录日期之后)。锚^
意味着匹配将在每个分区中的最早日期开始(这与字符串的正则表达式中的用法完全相同)。match_recognize
需要时间来学习(对于那些还不了解和使用它的程序员来说),但它非常值得付出努力。kxe2p93d2#
我得到的答案如下:
有没有更简单的方法?请告诉我。