我在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_FROM 和 VALID_UNTIL 之间的条目,或者选择当前日期为 null 日期的条目不在任何有效范围内。
我尝试了以下查询:
SELECT * FROM MYVIEW WHERE VALID_FROM IS NULL OR getdate() BETWEEN VALID_FROM AND VALID_UNTIL;
但是这不起作用,因为如果有一个 null 行,它将始终被选中,即使有另一行具有有效的日期范围。
是否可以创建一个查找正确行的SELECT查询?
答案 0 :(得分: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
答案 1 :(得分:0)
看起来您正在使用
显式选择空行VALID_FROM IS NULL
我建议尝试类似的事情:
SELECT * FROM MYVIEW WHERE getdate() BETWEEN VALID_FROM AND VALID_UNTIL;
或许我错过了这个问题...