首页 > 解决方案 > 如何选择所有未来的关闭时间?

问题描述

我们正在尝试根据商店的营业时间计算商店的关闭时间。

对于每个商店,我们都有一个如下所示的数据模型。

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

在计算未来的关闭时间时,这里有一些复杂性。

我们尝试了以下 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

标签: sqlpostgresql

解决方案


添加 Where 子句是否有问题

Where (repeat complex close calc) > LOCALTIMESTAMP

,假设您在计算中的日期时间没有受到时区问题的影响。


推荐阅读