1

我在 sqlanywhere11 中有一个具有以下结构的视图(日期为 dd-mm-yyyy 格式):

ID, VALID_FROM, VALID_UNTIL, SOME_VALUE
1, 01-01-2013, 01-02-2013 1
1, 02-02-2013, 01-03-2013 2
1, 02-03-2013, 01-04-2013 3
1, null, null 3

所以有多个id相同但日期不同的条目,日期也可能为空。现在我需要一个查询,仅选择当前日期介于VALID_FROMVALID_UNTIL之间的条目,或者如果当前日期不在任何有效范围内,则选择具有空日期的条目。
我尝试了以下查询:

SELECT * FROM MYVIEW WHERE VALID_FROM IS NULL OR getdate() BETWEEN VALID_FROM AND VALID_UNTIL;

但这不起作用,因为如果有一个行,它将始终被选中,即使有另一行具有有效的日期范围。

是否可以创建一个查找正确行的 SELECT 查询?

4

2 回答 2

2

你不能只做一个 [SELECT TOP 1] 并订购它,所以 null 将是最后一个吗?

SELECT TOP 1 * 
FROM MYVIEW 
WHERE VALID_FROM IS NULL OR getdate() BETWEEN VALID_FROM AND VALID_UNTIL
ORDER BY CASE WHEN VALID_FROM IS NOT NULL THEN 1 ELSE 2 END
于 2013-11-07T20:07:08.803 回答
0

看起来您正在使用

VALID_FROM IS NULL

我建议尝试类似:

SELECT * FROM MYVIEW WHERE getdate() BETWEEN VALID_FROM AND VALID_UNTIL;

或者也许我错过了这个问题......

于 2013-11-07T19:51:38.357 回答