如何为日期和时间维度执行SQL范围?

时间:2015-10-02 01:47:07

标签: sql amazon-redshift

我有一个报告表,其中包含saledateid(days)和saletimeid(分钟)维度。我需要选择一个可能少于或超过一天的范围。如果范围超过一天(例如(1705, 901) -> (1708, 1140)代表2015-09-01 15:00:00 -> 2015-09-04 18:59:00),我可以使用:

WHERE (saledateid = 1705 AND saletimeid >= 901)
   OR (saledateid BETWEEN 1705 + 1 AND 1708 - 1)
   OR (saledateid = 1708 AND saletimeid <= 1140))

但是,当saledateid与(1708, 901) to (1708, 1140)(仅4小时)相同(少于一天)时,这不起作用,因为将返回整天。我必须使用:

WHERE saledateid = 1708 AND saletimeid BETWEEN 901 AND 1140

我是否可以使用正确的表达式来涵盖这两种情况,或者在执行SQL之前我是否已决定应用程序代码?

1 个答案:

答案 0 :(得分:2)

我认为这会做你想做的事情:

where (saledateid > 1705 or
       saledateid = 1705 and saletimeid >= 901
      ) and
      (saledateid < 1708 or
       saledateid = 1708 and saletimeid <= 1140
      )