如何摆脱结束日期字段

时间:2013-09-01 20:16:30

标签: mysql sql

我有一张桌子,其中包含以下字段:

start | end | field A | field B | field C | id

我想摆脱结束领域。

在我的应用程序中,用户提供单个日期,并且我在开始和结束之间找到具有该日期的条目的数据。我想做到这一点,我只是让它找到了开始日期之后和下一个开始日期之前的条目。

如何组合SQL查询?

现在它:

Select * from table where $date between start and end

我想我必须自己加入该表

2 个答案:

答案 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),其中包含开始和结束日期以及处理重叠等的附加功能。

底线:保持冗余并享受简短的回答时间。