Oracle 先分組後根據每組排序取值

2021-09-24 17:38:08 字數 842 閱讀 2395

oracle  pl/sql 先分組後 根據每組排序 獲取每組最大值或最小值

示例:使用者每次登陸都會向表中插入乙個登入日期,現在需要獲取最近10分鐘內登入的使用者,及其最新的登陸時間。 

因此現需要根據使用者進行分組,然後得到每組中日期最大的那條資料。

表結構如下:

user_id

login_time

111:00

211:10

311:11

111:12

311:13

select a.user_id, a.login_time

from

(select row_number() over(partition by user_id order by login_time desc) group,

user_id, login_time

from login_info

where login_time > sysdate - 10/1440) a

where a.group=1

解析:

row_number()
是從1開始,為每一條記錄返回乙個順序編號的數字

over (partition by col1 order by col2)
則表示根據col1分組,在分組內部根據 col2排序

row_number()  over (partition by col1 order by col2)
那麼,整體函式返回的是排序後每條記錄的新順序編號。編號為1的資料,就是col2列的最大(小)值

sql 查詢分組後每組的總條數

使用者表 t basic user 外來鍵 unitsid 單位表 t units select count b.id u.fensuo from t basic user as b t units as u where b.unitsid u.id group by u.fensuo 此查詢用於 ...

sql server 分組後,取每組前1條資料

sql 排名開窗函式 row number dense rank rank ntile屬於排名函式。排名開窗函式可以單獨使用order by 語句,也可以和partition by同時使用。partition by用於將結果集進行分組,開窗函式應用於每一組。oder by 指定排名開窗函式的順序。在...

rollup函式(分組後對每組資料分別合計)

sql select deptno,job,sum sal from emp group by deptno,job order by deptno 2 單獨使用分組查詢 34 deptno job sum sal 5 610 clerk 1300 710 manager 2450 810 pres...