mysql 搜索语句中 OFFSET 可以脱离 limit 单独使用吗?

2020-08-10 18:32:41 +08:00
 black11black

如题,业务场景是,假设我有一个铆定日期为 2020 年 1 月 1 号

我需要获取该日期往前 10 天开始,到最新日期为止的所有数据,

即根据 2020-1-1 获取 2019-12-21 到 2020-8-1 (假设今天)的数据,有没有办法在一次搜索里完成?

以前做这种实现都会拆成两条,用 UNION 搞定

比如写成这样

SELECT date FROM `table` WHERE date < '2020-1-1' ORDER BY date DESC LIMIT 10
UNION
SELECT date FROM `table` WHERE date >= '2020-1-1' ORDER BY date

一直用的也挺好的,今天想起来问一下万能的 v 友们有没有更优雅的写法

比如这种感觉的

SELECT date FROM `table` WHERE date >= '2020-1-1' ORDER BY date OFFSET -10
2487 次点击
所在节点    MySQL
8 条回复
AngryPanda
2020-08-10 18:43:04 +08:00
没看出来 union 的必要性。
black11black
2020-08-10 18:44:44 +08:00
@AngryPanda 日期不连贯,没法在业务逻辑中预先求出前 10 天的位置。
lxk11153
2020-08-10 18:49:07 +08:00
这样?
  //为了检索从某一个偏移量到记录集的结束所有的记录行,可以指定第二个参数为 -1:
   mysql> SELECT * FROM table LIMIT 95,-1; // 检索记录行 96-last
love
2020-08-10 18:51:02 +08:00
limit 一个亿 不行吗??
lxk11153
2020-08-10 18:54:35 +08:00
fixed #3: 当我没说。
Justin13
2020-08-11 09:15:41 +08:00
可以试试 Interval 做日期的偏移
zhangysh1995
2020-08-11 10:41:40 +08:00
SELECT date FROM `table` WHERE date BETWEEN '2019-12-21' AND '2020-8-1' ;
black11black
2020-08-12 00:15:37 +08:00
@Justin13 看了看,这种偏移应该跟业务逻辑里实现的效果是一样的,跟需求还是不太一致

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/697148

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX