2013-10-30 80 views
0

我有一个包含Staion平台的表格,以及它们何时运行以及何时关闭。 我想知道2010年1月1日至2010年1月31日期间运营的电台的数量。 右侧是我寻找的结果。我用黄色突出显示了那些不应包含在结果中的内容。这些电台需要按地点分组。 MAP_id是PK。SQL查询缓慢变化的维度

,我认为它应该工作的方式是去的每一行,并检查开始和结束日期是否落在2010年一月

难道这查询的工作?

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

任何帮助将appriciated。

enter image description here

+0

提供了站和位置表的模式将极大地帮助。 –

+0

这是唯一的桌子。这是所有车站信息被保存的地方。位置信息不是什么。该业务只是知道它为1-14 – user2343837

回答

0

你的条件是: “01/01/2010和31/01/2010之间的操作”。我期望在查询中看到这两个日期。

这是一个重叠时间间隔问题的例子。这是说,该电台在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'); 
+0

哇!谢谢!我得到了与上面我的WHERE子句一样的结果。你认为我建立它的方式有什么问题吗?我仍然在学习代码,我想改进。 – user2343837

+0

@ user2343837。 。 。如您所述,这是一个缓慢变化的方面。该月底可用的电台可用于整个月 - 因此数据掩盖了您的查询仅查看一天的事实。 –