在我的数据库中有一个辅助表,它包含一年中的所有日子,其中有一列(is_working_day),它是一个布尔标志,指示这一天是否是工作日。
我想在这个表上建立一个查询,它允许我按顺序标记一个月的最后2个工作日和前三个工作日(1,2,3,4,5)。
输出应该类似于:
| 天|是工作日|标志|
| --|--|--|
| 2023年01月01日| 0 | 0 |
| 2023年01月02日| 1 | 1 |
| 2023年01月03日| 1 | 2 |
| 2023年01月04日| 1 | 0 |
| 2023年01月05日| 1 | 0 |
| ......这是什么?|......这是什么?|......这是什么?|
| 2023年1月29日| 1 | 3 |
| 2023年1月30日| 1 | 4 |
| 2023年1月31日| 1 | 5 |
| 2023年02月01日星期一| 1 | 1 |
| 2023年02月02日| 1 | 2 |
Day和is_working day已经存在于我的表中,我想要的是一些逻辑来创建“flag”列。
2条答案
按热度按时间yebdmbv41#
如果只使用SQL的解决方案是可以接受的,那么你可以使用窗口函数来生成标志列。一个例子:
字符串
测试结果:
| 天|是工作日|标志|
| --|--|--|
| 2023-01-01 2023-01-01| 0 |* 空 |
| 2023-01-02 2023-01-02| 1 | 1 |
| 2023-01-03 2023-01-03| 0 | 空 |
| 2023-01-04 2023-01-04| 1 | 2 |
| 2023-01-05 2023-01-05| 1 | 3 |
| 2023-01-29 2023-01-29 2023-01-29| 1 | 4 |
| 2023-01-30 - 2023-01-30| 0 | 空 *|
| 2023-01-31 -01- 01 - 01 - 01| 1 | 5 |
| 2023-02-01 2023-02-01 2023-02-01| 1 | 1 |
| 2023-02-02 2023 -02-02| 1 | 2 |
将日期部分提取函数替换为RDBMS中可用的函数。
DB<>Fiddle
yk9xbfzb2#
试试这个:
字符串