【发布时间】:2021-01-13 22:11:49
【问题描述】:
给定以下表结构
| Column |
|---|
| Id |
| Name |
| DateCreated |
以下数据
| id | Name | DateCreated |
|---|---|---|
| 1 | Joe | 1/13/2021 |
| 2 | Fred | 1/13/2021 |
| 3 | Bob | 1/12/2021 |
| 4 | Sue | 1/12/2021 |
| 5 | Sally | 1/10/2021 |
| 6 | Alex | 1/9/2021 |
我需要能够根据创建日期对数据进行分页的 SQL。查询应返回前 3 条记录,以及与前 3 条记录相同的任何记录。
所以给出上面的数据,我们应该得到 Joe、Fred 和 Bob(作为前 3 条记录)加上 Sue,因为 sue 与 Bob 的日期相同。
是否有像 ROW_NUMBER 这样的东西,它会随着遇到不同值的每一行而递增。
在某些情况下,此查询用于生成议程类型视图,一旦我们选择了任何日期,我们希望将该日期的所有数据保存在一起。
编辑 我确实有一个解决方案,但它闻起来很臭:
;WITH CTE AS ( SELECT ROW_NUMBER() OVER(ORDER BY DateCreated DESC) RowNum,CAST(DateCreated AS DATE) DateCreated,Name
FROM MyTable),
PAGE AS (SELECT *
FROM CTE
WHERE RowNum<=5)
SELECT *
FROM Page
UNION
SELECT *
FROM CTE
WHERE DateCreated=(SELECT MIN(DateCreated) FROM Page)
【问题讨论】:
-
嗯,表格在编辑模式的预览中显示得很好,但不是在这里......
-
ROW_NUMBER和DENSE_RANK的组合,后者只会在不同的变化时发生变化,但在这种情况下,您将获得前 5 行
标签: sql-server azure-sql-database