繁体   English   中英

SQL查询一个缓慢变化的维度

[英]SQL Querying a slowly changing dimension

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

我认为应该使用的方法是逐行检查开始日期和结束日期是否在2010年1月之内。

此查询可以工作吗?

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

任何帮助将被申请。

在此处输入图片说明

您的条件是:“在2010年1月1日至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');

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM