我正在使用 DB2,尽管使用任何 SQL 风格的解决方案对我来说都可能很容易转换。
我没有设计这个数据库,或者使用该数据库的应用程序。我无权更改此应用程序、其工作方式或数据。因为它违背了我认为的开始日期和结束日期的常规用法,所以我正在努力编写像选择特定时间点这样简单的东西。
以下是表格的相关/编辑部分:
OBJECTID FACILITY_ID START_DATE END_DATE FACILITY_NAME
1001 500 1/1/1980 5/1/2000 Really Old Name
1002 500 1/1/1980 1/1/2006 Old Name
1003 500 1/1/1980 null Current Name
1004 501 1/1/1980 3/1/2008 Closed Facility Name
1004 502 1/1/1980 null Another Current Name
我想要返回的是 2005 年 7 月 1 日有效的记录:
OBJECTID FACILITY_ID START_DATE END_DATE FACILITY_NAME
1002 500 1/1/1980 1/1/2006 Old Name
1004 501 1/1/1980 3/1/2008 Closed Facility Name
1004 502 1/1/1980 null Another Current Name
我试图避免子选择,但了解它们可能是必要的。如果我确实需要子选择,我希望将其限制为一个。在开始日期和结束日期之间查找不起作用,因为它不会返回只有一条记录且结束日期为空的设施。在某些情况下,添加 OR 条件以包含空的结束日期可能会返回多个记录。这个问题在服务上看起来很简单,我一定错过了一个非常明显的解决方案。有人有什么想法吗?
最佳答案
这行得通吗:
SELECT * FROM table_name
WHERE START_DATE < '7/1/2005' AND (END_DATE > '7/1/2005' OR END_DATE IS NULL);
关于sql - 从设施表中选择使用不当的开始和结束日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/183698/