如题,业务场景是,假设我有一个铆定日期为 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
1
AngryPanda 2020-08-10 18:43:04 +08:00
没看出来 union 的必要性。
|
2
black11black OP @AngryPanda 日期不连贯,没法在业务逻辑中预先求出前 10 天的位置。
|
3
lxk11153 2020-08-10 18:49:07 +08:00
这样?
//为了检索从某一个偏移量到记录集的结束所有的记录行,可以指定第二个参数为 -1: mysql> SELECT * FROM table LIMIT 95,-1; // 检索记录行 96-last |
4
love 2020-08-10 18:51:02 +08:00
limit 一个亿 不行吗??
|
5
lxk11153 2020-08-10 18:54:35 +08:00
fixed #3: 当我没说。
|
6
Justin13 2020-08-11 09:15:41 +08:00 via Android
可以试试 Interval 做日期的偏移
|
7
zhangysh1995 2020-08-11 10:41:40 +08:00
SELECT date FROM `table` WHERE date BETWEEN '2019-12-21' AND '2020-8-1' ;
|
8
black11black OP @Justin13 看了看,这种偏移应该跟业务逻辑里实现的效果是一样的,跟需求还是不太一致
|