我有一张桌子,其中包含以下字段:
start | end | field A | field B | field C | id
我想摆脱结束领域。
在我的应用程序中,用户提供单个日期,并且我在开始和结束之间找到具有该日期的条目的数据。我想做到这一点,我只是让它找到了开始日期之后和下一个开始日期之前的条目。
如何组合SQL查询?
现在它:
Select * from table where $date between start and end
我想我必须自己加入该表
答案 0 :(得分:0)
你可以这样做:
Select *
from table
where $date >= start
order by start
limit 1;
编辑:
如果你想要在结束日期之后的第一条记录,那么你会做类似的事情,只需要对end
而不是start
进行比较:
Select *
from table
where $date > end
order by start
limit 1;
答案 1 :(得分:0)
事实上,在这种情况下,您希望保留开始日期和结束日期。即使它是冗余信息。
在数据仓库中,我们拥有尺寸缓慢变化的实体。它们是通过链接开始和结束日期来构建的 - 就像在您的示例中一样。保持这种特定的冗余比使用每个查询搜索下一个条目更有效。这是可能的,但它意味着通过子查询运行或对表的一部分进行排序。
专业分析数据库如何处理这个问题?
IBM和Teradata有一个名为temporal的功能。它包含一种数据类型(PERIOD),其中包含开始和结束日期以及处理重叠等的附加功能。
底线:保持冗余并享受简短的回答时间。