Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.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问题:如何在每个记录组中选择任意数量的记录?_Sql - Fatal编程技术网

SQL问题:如何在每个记录组中选择任意数量的记录?

SQL问题:如何在每个记录组中选择任意数量的记录?,sql,Sql,我有一个表“articles”:id/uid/last\u update/content 我想构造一个sql语句,它选择uid标识的每个用户的任意数量的记录,这些记录是最近从表中更新的。如何才能做到这一点?在SQL Server和Oracle中,您可以使用行编号来标记每个用户的记录。以下查询标记rn=1位于该用户的最新行,rn=2位于第二个最新行,依此类推: DECLARE @Top tinyint; SELECT @Top = ABS(CHECKSUM(NEWID())) % 5 + 1;

我有一个表“articles”:id/uid/last\u update/content


我想构造一个sql语句,它选择uid标识的每个用户的任意数量的记录,这些记录是最近从表中更新的。如何才能做到这一点?

在SQL Server和Oracle中,您可以使用行编号来标记每个用户的记录。以下查询标记rn=1位于该用户的最新行,rn=2位于第二个最新行,依此类推:

DECLARE @Top tinyint;

SELECT @Top = ABS(CHECKSUM(NEWID())) % 5 + 1;

;WITH MyCTE AS
(
    SELECT
        stuff, things, 
        ROW_NUMBER() OVER (PARTITION BY uid ORDER BY UpdatedDateTime DESC) AS Ranking
    FROM
        MyTable
)
SELECT
    stuff, things
FROM
    MyCTE
WHERE
    Ranking <= @Top
select *
from (
    select
        row_number() over (partition by uid order by UpdateDt desc) 
        as rn
    ,   *
    from YourTable
) sub
where rn <= 3
子查询是必需的,因为不能直接在WHERE子句中使用ROW\ U NUMBER


如果您使用的是MySQL,那么这个问题就更难了。这里有一个链接,指向SQL Server和Oracle中的。

,您可以使用行号为每个用户的记录添加标签。以下查询标记rn=1位于该用户的最新行,rn=2位于第二个最新行,依此类推:

select *
from (
    select
        row_number() over (partition by uid order by UpdateDt desc) 
        as rn
    ,   *
    from YourTable
) sub
where rn <= 3
子查询是必需的,因为不能直接在WHERE子句中使用ROW\ U NUMBER

如果您使用的是MySQL,那么这个问题就更难了。这里有一个链接到一个