我收到了与此类似的查询
select *
from stuff where stuff.id = 1
and start_Dt < = todays_date
and End_Dt > = todays_date
我问给我的人为什么要比较日期,答案是“开始日期和结束日期对于确保唯一的记录匹配是必要的”
我很困惑,这种比较不等于任何可能的日期吗?
我收到了与此类似的查询
select *
from stuff where stuff.id = 1
and start_Dt < = todays_date
and End_Dt > = todays_date
我问给我的人为什么要比较日期,答案是“开始日期和结束日期对于确保唯一的记录匹配是必要的”
我很困惑,这种比较不等于任何可能的日期吗?
原因是,您的表中的 ID 不是唯一的,即您可以拥有多行stuff.id = 1
.
但在任何给定时间只有一个处于活动状态。这通过日期比较进行检查:它返回stuff.id = 1
当前有效的行。这是开始日期在过去 ( start_Dt <= todays_date
) 和结束日期在未来 ( End_Dt >= todays_date
) 的行。
举一个例子来说明 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 日时再次更改。
您还可以使用它来计划未来的价格上涨。