mysql - 如果计划 1 年,每天取 3 行
问题描述
我有一张表圣经,它有两列 id、chample_name 及其如下所示:-
id chapter_name
365 chapter_1
366 chapter_2
367 chapter_3
368 chapter_4
369 chapter_5
370 chapter_6
... ....
1456 chater_1092
Total Records 1092 和 id 将从 365 开始到 1465 固定。现在用户每天将阅读 3 章。假设调度从今天开始,即2020 年 2 月 23 日到2021 年 2 月 20 日。因此,用户要求 2020 年 2 月 23 日将出现 3 章,2020 年 2 月 24 日将出现下 3 章,依此类推。
id chapter_name date
365 chapter_1 2020-02-23
366 chapter_2 2020-02-23
367 chapter_3 2020-02-23
368 chapter_4 2020-02-24
369 chapter_5 2020-02-24
370 chapter_6 2020-02-24
... ....
1454 chater_1090 2021-02-20
1455 chater_1091 2021-02-20
1456 chater_1092 2021-02-20
所以现在假设今天是 2020 年 2 月 24 日,用户将在应用程序中看到第4 章、第 5 章、第 6 章。注意:-我不想在表中存储日期列。原因是我需要每年更新日期列。任何人都可以帮助我如何每天获取 3 条记录。所以我对 2020 年 2 月 24 日的预期产出
id chapter_name date
368 chapter_4 2020-02-24
369 chapter_5 2020-02-24
370 chapter_6 2020-02-24
解决方案
您可以使用dense_rank()
和算术将行分成 3 组:
select b.*,
ceiling(dense_rank() over (order by id) / 3)
from bibles b
那么问题是如何获取日期。根据您的示例,这可能是:
select b.*,
'2020-02-23' + interval ( ceiling(dense_rank() over (order by id) / 3) - 1) day
from bibles b;
但是,这- 1
取决于结果集中的第一行是什么。如果您希望它从 365 开始,那么:
select b.*,
'2020-02-23' + interval ( ceiling(dense_rank() over (order by id) / 3) - 1) day
from bibles b
where id >= 365;
推荐阅读
- r - 我可以用 sf 包从 lat long 做一个空间点吗
- r - 从课程列表中查找当前活动条目
- linux - 有没有办法在不阻塞的情况下跟踪进程的实时函数调用
- python - y 中人口最少的类只有 1 个成员,太少了。任何班级的最小组数不能少于 2. 怎么办
- javascript - 具有 SetInterval 方法的按钮上的单击事件
- react-native - React Native:如何读取和显示 xml 文件
- reactjs - 使用电子邮件创建用户后如何在firebase中注销用户?
- server-side-rendering - 角度工作空间的服务器端渲染无法继续
- mulesoft - Mule 4 中共享负载均衡器 URL 和外部 IP 地址 URL 之间的区别
- java - 如何将 reCaptcha 集成到基于 Spring Boot 的 Java 应用程序中?