今天遇到乙個問題,需要查詢使用者連續下單的月份
這個跟查詢使用者連續登陸的天數一樣 都是查詢連續的時間或者數字
這樣的查詢在oracle中需要用到row_number() over(partition by 分組的列 order by 排序的列)函式
舉例如下:
今天是5號
表a使用者 登陸的日期 使用者在表中用userid欄位表示 日期date
a 5
a 4
a 3
a 2
b 5
b 4
b 2
b 1
c 4
c 3
需要得到的結果是
使用者 連續登陸的天數
a 4
b 2
sql實現
select userid, date, row_number() over(partition by userid order by date desc) as rn ---這裡按使用者分組 然後按date排序
from a
這個sql查出來的結果 就是
使用者 登陸的日期 rn
a 5 1
a 4 2
a 3 3
a 2 4
b 5 1
b 4 2
b 2 3
b 1 4
c 4 1
c 3 2
做乙個處理,讓大家看的更清楚一些
使用者 登陸的日期 5-rn (用當天日期減去排序號)
a 5 4
a 4 3
a 3 2
a 2 1
b 5 4
b 4 3
b 2 2
b 1 1
c 4 4
c 3 3
可以看出來 登陸的日期減去 (5-rn) = 1 就表明是連續登陸
我們繼續處理sql,把上面查出來的命名為表b
select userid, min(5-rn) from b where date - (5-rn) = 1 group by userid
取出最小的5-rn差值然後再用5減去就是連續的天數了
結果a 1
b 3
再用5去減
a 4
b 2
SQL 連續記錄查詢
1 題目要求輸出的時連續三行的記錄,則可以選擇三張單錶進行自關聯,連線的要求即為id序號的遞增。連線方式為left join 如下圖即為無要求時的連線語句及結果 有圖可知,連線的每一行的 id 時從s1 到s2遞增1,再到s3遞增1。再因為連線的每一行即為代表連續的三行的記錄。根據題目要求,則要求p...
SQL查詢出任意連續日期或時間
查詢一年十二個月 select case when length mon 1 then concat 0 mon else mon end months from select m m 1 mon from 表名稱隨便,select m 0 a aa limit 12 查詢出一天二十四小時 sele...
經典sql查詢語句
以下如果是數字型別的鍵值,就不應該加單引號。等於 select from persons where city beijing select from 要查詢的表名 where 鍵名 鍵值 不等於 select from persons where city beijing select from ...