0

我有一个表,其中包含以下字段:

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

我想摆脱 end 字段。

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

我如何把那个 SQL 查询放在一起?

现在它的:

Select * from table where $date between start and end

我想我必须自己加入那张桌子

4

2 回答 2

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;
于 2013-09-01T20:18:35.240 回答
0

实际上,在这种情况下,您希望保留开始日期和结束日期。即使是冗余信息。

在数据仓库中,我们拥有维度变化缓慢的实体。它们是通过链接开始日期和结束日期来构建的 - 就像在您的示例中一样。保持这种特殊的冗余比使用每个查询搜索下一个条目更有效。这是可能的,但这意味着通过子查询运行或对表的一部分进行排序。

专业分析数据库如何处理这个问题?

IBM 和 Teradata 有一个称为 temporal 的功能。它包含一种数据类型 (PERIOD),其中包含开始日期和结束日期以及处理重叠等的附加功能。

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

于 2013-09-01T20:42:55.053 回答