sql - 如何选择所有未来的关闭时间?
问题描述
我们正在尝试根据商店的营业时间计算商店的关闭时间。
对于每个商店,我们都有一个如下所示的数据模型。
ID | 工作日 | 开幕分钟 | shift_length |
---|---|---|---|
1 | 0 | 540 | 990 |
2 | 1 | 540 | 990 |
3 | 2 | 540 | 990 |
4 | 3 | 540 | 990 |
5 | 4 | 540 | 990 |
6 | 5 | 540 | 990 |
7 | 6 | 540 | 990 |
weekday
是星期几,其中 0 是星期日。opening_minute
是 540 是 09:00 的开放时间。shift_length
是商店营业的时间长度,其中 990 是 16.5 小时。
在计算未来的关闭时间时,这里有一些复杂性。
我们尝试了以下 SQL 语句。
SELECT
"opening_hours".*,
date_trunc('week', '2021-04-29'::date - 1)::timestamp +
make_interval(
days => weekday,
mins => opening_minute + shift_length
) closes_at
FROM "opening_hours";
这条语句让我们走到了一半,输出如下。
ID | 工作日 | 开幕分钟 | shift_length | close_at |
---|---|---|---|---|
1 | 0 | 540 | 990 | 2021-04-28 01:30:00 |
2 | 1 | 540 | 990 | 2021-04-29 01:30:00 |
3 | 2 | 540 | 990 | 2021-04-30 01:30:00 |
4 | 3 | 540 | 990 | 2021-05-01 01:30:00 |
5 | 4 | 540 | 990 | 2021-05-02 01:30:00 |
6 | 5 | 540 | 990 | 2021-05-03 01:30:00 |
7 | 6 | 540 | 990 | 2021-05-04 01:30:00 |
我们正在取得进展,但输出包括过去几天的关闭时间。我们希望输出仅包含未来的关闭时间。
我们一直在兜圈子。我们如何只输出未来的关闭时间?例如,如果是 2021 年 4 月 29 日的 08:30,我们预计会出现以下输出。
ID | 工作日 | 开幕分钟 | shift_length | close_at |
---|---|---|---|---|
3 | 2 | 540 | 990 | 2021-04-30 01:30:00 |
4 | 3 | 540 | 990 | 2021-05-01 01:30:00 |
5 | 4 | 540 | 990 | 2021-05-02 01:30:00 |
6 | 5 | 540 | 990 | 2021-05-03 01:30:00 |
7 | 6 | 540 | 990 | 2021-05-04 01:30:00 |
1 | 0 | 540 | 990 | 2021-05-05 01:30:00 |
2 | 1 | 540 | 990 | 2021-05-06 01:30:00 |
解决方案
添加 Where 子句是否有问题
Where (repeat complex close calc) > LOCALTIMESTAMP
,假设您在计算中的日期时间没有受到时区问题的影响。
推荐阅读
- c++ - 如何声明 boost histograms 的 std::vector ?提升直方图的类型是什么?
- flutter - 如何在 Dart 中将秒转换为分钟?
- javascript - 获取给定组件名称的组件列表,无论它们是嵌套的 - Vue
- python - 单击按钮 selenium python 后等待类加载值
- r - 在 R 或任何其他解决方案中对这两个数据框架使用连接
- ajax - 如何在 Azure 应用服务 (Linux) 中增加 HTTP 请求标头的大小
- python-3.x - 这个初学者 Python 程序中的作用域是怎么回事?
- c++ - 子类化 std::chrono::duration
- python - 为什么在 Python 中运行“os.system('cmd')”什么都不做?
- powershell - 适用于 Windows Server 2008 的 PowerShell 异步 Zip