SQL查询缓慢变化的维度

时间:2013-10-30 00:00:43

标签: sql tsql

我有一张Staion平台的桌子,当它们运作时以及关闭时。 我想获得2010年1月1日至2010年1月31日期间运营的车站数量 在右侧是我正在寻找的结果。我在黄色中突出显示了那些不应包含在结果中的内容。站点需要按位置分组。 MAP_id是PK。

我认为它的工作方式是去每一行,检查开始和结束日期是否在2010年1月之内。

此查询可以工作吗?

SELECT ...
FROM ...
WHERE
'2010/01/31' between startdate and 
case when enddate is null then Getdate()
else enddate
end

任何帮助都会得到满足。

enter image description here

1 个答案:

答案 0 :(得分:0)

您的条件是:“在01/01/2010和2010年1月31日之间运作”。我希望在查询中看到这两个日期。

这是重叠时间间隔问题的一个例子。这就是说,该站于2010年1月1日或之前开始,于2010年1月31日或之后结束。以下是该逻辑的where子句:

where startdate <= '2010-01-01' and
      (enddate is null or enddate >= '2010-01-31');

请注意,逻辑可能略有不同,具体取决于是否包含终点。

您也可以将其写为:

where startdate <= '2010-01-01' and
      coalesce(enddate, getdate()) >= '2010-01-31');