0

我收到了与此类似的查询

select * 
from stuff where stuff.id = 1 
and start_Dt < = todays_date 
and End_Dt > = todays_date 

我问给我的人为什么要比较日期,答案是“开始日期和结束日期对于确保唯一的记录匹配是必要的”

我很困惑,这种比较不等于任何可能的日期吗?

4

2 回答 2

3

原因是,您的表中的 ID 不是唯一的,即您可以拥有多行stuff.id = 1.
但在任何给定时间只有一个处于活动状态。这通过日期比较进行检查:它返回stuff.id = 1当前有效的行。这是开始日期在过去 ( start_Dt <= todays_date) 和结束日期在未来 ( End_Dt >= todays_date) 的行。

于 2011-06-09T11:10:10.903 回答
0

举一个例子来说明 daniel-hilgarth 的答案,您可能有一个包含随时间变化的费率的表。

此特定示例显示了英国的标准增值税税率。

id  StartEffectiveDate  EndEffectiveDate    Rate
1   01/01/1900 00:00    30/11/2008 23:59    17.5
1   01/12/2008 00:00    31/12/2009 23:59    15.0
1   01/01/2010 00:00    03/01/2011 23:59    17.5
1   04/01/2011 00:00    01/01/2099 00:00    20.0

所以对于今天的汇率,这将返回这一行

id  StartEffectiveDate  EndEffectiveDate    Rate
1   04/01/2011 00:00    01/01/2099 00:00    20.0

这个系统的优点是你可以预先实现这个表。所以在 2009 年 12 月,它将使用 15.0 增值税,但一旦您的计算机日期达到 2010 年 1 月 1 日,它将自动更改为 17.5,然后在日期达到 2011 年 1 月 4 日时再次更改。

您还可以使用它来计划未来的价格上涨。

于 2011-06-09T11:53:36.867 回答