【发布时间】:2022-01-11 18:30:32
【问题描述】:
我有一个要求获得一些在线课程。
这是我可以获得的结果示例:
course_code | course_date | participant_name
------------+-------------+------------------
21175A | 2021-12-01 | Jon Doe
21175A | 2021-12-01 | Lisa Tia
21175A | 2021-13-01 | Jon Doe
21175A | 2021-13-01 | Lisa Tia
如您所见,我会根据日期和参与者获得同一课程的多行,因此我必须在 PHP 中执行一些过程以将所有内容放入带有键的数组中 (course_code)
我想进行分页以获取前 25 门课程(而不是行)
SELECT course_code, course_date, participant_name
FROM courses
ORDER BY course_date
OFFSET 0
FETCH NEXT 25 ROWS ONLY
这行不通,因为一门课程可以占用多行(此处为 4 行)。所以我想知道即使有 100 行,我是否可以编写一个查询来获取前 25 门课程(基于 course_code 列)。
你有什么想法吗?提前谢谢你
编辑:这就是我所做的:
WITH cte AS
(
SELECT course_code
FROM courses
WHERE course_date <= '2021-12-31'
ORDER BY course_code
OFFSET 0 ROWS
FETCH NEXT 25 ROWS ONLY
)
SELECT *
FROM courses
INNER JOIN cte ON cte.course_code = courses.course_code
WHERE course_date <= '2021-12-31'
我在两者中都添加了WHERE 子句以使请求变慢
【问题讨论】:
-
首先使用 CTE 获取您的 25 门课程,然后加入其中以获取剩余数据
-
@Stu 是的,谢谢你,我就是这么做的!
-
如果您出于性能原因进行分页,您可能需要查看Keyset Pagination,它比按行号分页性能要好得多
标签: sql sql-server pagination