Sql 如何为Oracle中的每个id用户提取前5行?
我只有一个表,我想为每个ID\u用户提取前5行 我执行以下查询:Sql 如何为Oracle中的每个id用户提取前5行?,sql,oracle,oracle11g,greatest-n-per-group,top-n,Sql,Oracle,Oracle11g,Greatest N Per Group,Top N,我只有一个表,我想为每个ID\u用户提取前5行 我执行以下查询: SELECT ID_USER as U_ID_USER, COUNT(ID_USER) as NUM_TIC FROM TABLE_USERS GROUP BY ID_USER ORDER BY ID_USER 运行时返回以下信息: U_ID_USER NUM_TIC 16469 34 29012 4 33759 2 DATE ID_USER
SELECT
ID_USER as U_ID_USER,
COUNT(ID_USER) as NUM_TIC
FROM
TABLE_USERS
GROUP BY ID_USER
ORDER BY ID_USER
运行时返回以下信息:
U_ID_USER NUM_TIC
16469 34
29012 4
33759 2
DATE ID_USER C1 C2 C3
13/12/17 16469 X X X
11/12/17 16469 X X X
07/12/17 16469 X X X
04/12/17 16469 X X X
01/12/17 16469 X X X
然后,我想将ID_USER的每个值放入以下查询中,以便仅提取前5行:
SELECT *
FROM(
SELECT
DATE,
ID_USER,
C1,
C2,
C3
FROM
TABLE_USERS
WHERE
ID_USER = '16469'
ORDER BY ID_USER)
WHERE ROWNUM < 6;
我想要的是PL/SQL中的一个自动过程或一个查询,它可以提供如下输出:
DATE ID_USER C1 C2 C3
13/12/17 16469 X X X
11/12/17 16469 X X X
07/12/17 16469 X X X
04/12/17 16469 X X X
01/12/17 16469 X X X
25/12/17 29012 X X X
20/12/17 29012 X X X
15/11/17 29012 X X X
10/11/17 29012 X X X
18/12/17 33759 X X X
15/12/17 33759 X X X
是否可以使用PL/SQL或查询获取此输出?这可以使用行号完成
使用行号:
使用rownum时,它会从结果集中返回那么多行。行号不同。这是一个枚举行的函数。根据PARTITION BY子句,每个id_用户从1开始。根据ORDER BY子句,日期最高的行的值为1,次高的行的值为2,依此类推。作为一般性建议,如果需要从1到5的行,请使用
SELECT DATE,ID_USER,C1,C2,C3
FROM (SELECT
T.*
,ROW_NUMBER() OVER(PARTITION BY ID_USER ORDER BY DATECOL DESC) AS RNUM
FROM TABLE_USERS T
) T
WHERE RNUM < 6
SELECT date, id_user, c1, c2, c3
FROM (SELECT u.*,
ROW_NUMBER() OVER (PARTITION BY id_user ORDER BY date DESC) as seqnum
FROM table_users u
)
WHERE seqnum <= 5;