ROW_NUMBER()
函数是数据库中的一个窗口函数(Window Function),可以用于为结果集中的每一行分配一个唯一的连续整数。结合使用 OVER
子句和 PARTITION BY
、ORDER BY
时,ROW_NUMBER()
可以提取每个分支(Name)的最新记录。
下面是模拟SQL:table:YourTableName;field:Name,Create_Date,,,,,,,
数据改造,
SELECT
ROW_NUMBER() OVER (PARTITION BY Name ORDER BY Create_Date DESC) AS rn,
Name,
Create_Date
FROM YourTableName
查询结果
完整SQL:查询每个分支(Name)的最新记录。
SELECT *
FROM (
SELECT *,
ROW_NUMBER() OVER (PARTITION BY Name ORDER BY Create_Date DESC) AS rn
FROM YourTableName
) AS RankedResults
WHERE rn = 1;
SQL解析
ROW_NUMBER() OVER (PARTITION BY Name ORDER BY Create_Date DESC) AS rn
1、OVER 子句:这个子句定义了窗口函数的作用范围,即哪些行会被考虑在内以进行行号的分配。
2、PARTITION BY Name:这里指定了分区的依据。在这个例子中,ROW_NUMBER()
函数会根据 Name列的值将数据分为多个分区。每个分支(Name)的数据都会被视为一个独立的集合,在每个集合内部独立地分配行号。这意味着,每个分支的第一行都会被赋予行号1,第二行被赋予行号2,依此类推,即使这些行在全局排序中可能并不相邻。
3、ORDER BY Create_Date DESC:这里是指定了在每个分区内如何对数据进行排序,以决定行号的分配顺序。在这个例子中,数据会根据 Create_Date列的值降序排列。也就是说,在每个分区(即每个分支)内,最新的 Create_Date 会被赋予行号1,次新的被赋予行号2,依此类推。
总结:这个查询的作用是为每个分支(Name)内的记录按照 Create_Date 的降序排列,并为这些记录分配一个唯一的连续整数(行号)。这对于提取每个分支的最新记录、前几名记录等场景非常有用。