【发布时间】:2020-02-14 12:32:36
【问题描述】:
我想用一个 SELECT SQL 查询选择多个偏移量。这可能吗?
例如,假设我有一个名为 dates 的非连续日期表。
date
----------
2020-01-01
2020-01-09
2020-01-16
2020-01-22
2020-01-29
2020-02-01
2020-02-04
2020-02-10
2020-02-13
我想选择最近日期的第 1、第 4 和第 7 个偏移量。在本例中,查询应返回:
offset date
------ -------
1 2020-02-10
4 2020-01-29
7 2020-01-09
理想情况下,我想编写如下查询:
SELECT
*
FROM
dates
ORDER BY
date DESC
OFFSET
(1, 4, 7)
显然,由于 LIMIT/OFFSET 子句,这不会编译。
我可以尝试一个 UNION,但这不仅非常冗长而且不起作用,因为 LIMIT/OFFSET 子句必须在最后一个 UNION 之后。
失败:
SELECT 1, date FROM dates ORDER BY date DESC LIMIT 1 OFFSET 1
UNION
SELECT 4, date FROM dates ORDER BY date DESC LIMIT 1 OFFSET 4
UNION
SELECT 7, date FROM dates ORDER BY date DESC LIMIT 1 OFFSET 7
是否有一个优雅的查询来做到这一点?我能想到的另一个选择是将 row_number() 与窗口函数一起使用,然后执行SELECT * WHERE row_number IN (1, 4, 7) 之类的操作。但是,在某些情况下,我不得不使用不支持窗口函数的旧版 SQLite。
【问题讨论】:
-
所以你总是想要 3 行,不管表中有数百行?
-
没有。我希望偏移向量是动态的。可能是 100 项