【问题标题】:Only get rows based on flag for weekend / weekday / both仅根据周末/工作日/两者的标志获取行
【发布时间】:2020-07-29 03:35:12
【问题描述】:

我有一大堆关税,有些在周末工作,有些在工作日工作,有些则两者兼而有之。有时我会在 NOW() 上查询,但有时我会在 datetime 列上查询。

id   | Weekday | Weekend | Price
 1   | 1       | 0       | 0.04   
 2   | 0       | 1       | 0.02          

date
2020-04-15 00:00:00
2012-04-16 00:00:00

date 来自另一个表,与价格/星期几无关。

我知道我可以通过dates 获得周末

SELECT * FROM tariff where EXTRACT(ISODOW FROM date) IN (6,7)

但是我想不出我如何获得周末/工作日或两者都给定日期的行。

** 编辑 **

更新了表格以显示日期是分开的。我想要得到的是与该表中的日期相对应的关税,无论是工作日还是周末(或两者兼而有之,但我可以推断出来)。

周末1是周末使用的资费,工作日1,全天都是。

【问题讨论】:

  • 你能给出查询输入和输出的详细例子吗?
  • @pifor 我已经稍微更新了这个问题。还有更多的表格/数据,但试图将其归结为我要解决的最简单的问题。

标签: postgresql date weekday weekend


【解决方案1】:

无法为您提供查询,请提供任何要查询的内容。我们也不能确定 Weekday 和 Weekend 列的含义,正如您没有告诉我们的那样。但是,如果我们将它们作为布尔指标,其中 1 表示需要,那么可能会有类似的东西对您有用。

    select ...
      from ...
     where ...
       and (   (weekday = 1 and weekend =1) 
            or (weekday = 1 and extract(isodow from date) not in (6,7))
            or (weekend = 1 and extract(isodow from date)    in (6,7)) 
           ) ;

【讨论】:

  • 很抱歉,我已经稍微更新了问题以澄清WeekdayWeekend 的含义。
  • 请参阅帮助部分How to Ask。修改您的问题以包含表 DDL(全部)并将其中的样本数据作为 formatted text - 无图像,以及该数据的预期结果。还包括您当前的查询或尽可能多的查询。
  • 大约有 10 个表和一大堆多余的数据,无助于回答。看看你的回答,我认为这会奏效。
  • 如果您需要,可以查看minimal reproducible example。去除任何多余的数据(我们甚至不知道它已经消失了)。没有它祝你好运。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-09-20
  • 1970-01-01
  • 1970-01-01
  • 2021-10-21
  • 2019-07-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多