我有一個player1的表格,我想獲得連續第二天登錄的人數。因此,在我的案例中,輸出將是2,因為有2個人連續第二天登錄。我嘗試了以下方法 select count(*) from ( select player_id from player1 group by player_id 有 count(player_id)>1 按player_id排序 ) a 加入player1 b on a.player_id=b.player_id 和b.log_in_date in (b.log_in_date,(b.log_in_date 1))
但這是在獲得所有的記錄 那是9行
uj5u.com熱心網友回復:
在Oracle 12和更高版本中,你可以用match_recognize輕松完成這個任務:
select count(*)。
from player1
match_recognize(
partition by player_id
order by log_in_date
pattern (^ first_date same_day* next_day)
define next_day as log_in_date = first_date.log_in_date 1)
);
pattern子句(以及define)中的名稱是由我們決定的(我們創建這些名稱的方式與我們為表或查詢中的列提供別名一樣)。它們被用來對行進行分類--可以是 "first_date","same_day"(作為第一個日期),或 "next_day"(在初始登錄日期之后)。錨點^意味著匹配將從每個磁區中最早的日期開始(這與字串的正則運算式的使用方法完全相同)。
match_recognize需要花費時間來學習(對于那些還沒有了解和使用它的程式員來說),但是它非常值得付出努力。
uj5u.com熱心網友回復:
我能夠得到如下答案:
我能夠得到如下答案:
select count(distinct dt)from (
select player_id, min(log_in_date) 1 dt
from player1
group by player_id
having count(player_id) > 1
) A join player1
on player1.player_id = a.player_id
where player1.log_in_date = dt
是否有一個更簡單的方法?請讓我知道。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/325002.html
標籤:
上一篇:在一列中加入2個帶有分類標簽的表

