【发布时间】:2012-12-06 22:56:11
【问题描述】:
我们的数据库中有一系列预订,每个预订都有一个序列的多个会话。每个 Session 都有一个包含 DateTime 的“停止”。
我想选择两个日期之间所有会话都已结束的预订。
SELECT DISTINCT b.*
FROM Booking as b
JOIN Sequence as se
JOIN Session as s
ON (b.sequence_id=se.id AND s.sequence_id=se.id
AND s.stop between '2012-09-01 00:00:00' AND '2012-12-01 00:00:00');
此 SQL 选择包含 1 个或多个已结束会话的预订。
我只想要所有会话都结束的预订。
有什么想法吗?
【问题讨论】:
-
要么修改您的加入,要么添加另一个加入并选择 isnull(s.stop)。 IE 查找缺少结束日期的站点。
-
'stop' 在数据库中永远不会为空。每个会话中的“停止”必须介于两个时间戳之间才能选择预订。
-
如何知道给定的 Session 是否没有停止?创建 Session 时的默认值是多少?
-
'stop' 是预期的结束日期。它总是在创建会话时设置。
-
我想我明白了:选择没有任何超出日期范围的条目的会话?