Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何为Oracle中的每个id用户提取前5行?_Sql_Oracle_Oracle11g_Greatest N Per Group_Top N - Fatal编程技术网

Sql 如何为Oracle中的每个id用户提取前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

我只有一个表,我想为每个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   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;