0

我有一张带有 Staion 平台的桌子,以及它们何时运行以及何时关闭。我想获得在 2010 年 1 月 1 日到 2010 年 1 月 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

任何帮助都将不胜感激。

在此处输入图像描述

4

1 回答 1

0

您的条件是:“在 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');
于 2013-10-30T00:25:32.783 回答