1

我有一张类似于这张的桌子:

StockId | Dispatched
--------------------    
1234    | 0
1234    | 1

直到dispatched = 0有一个库存项目的订单进入,然后它变为= 1

这适用于为今天的股票生成结果,因为您可以进行查询以显示 where dispatched ='0'。但是,对于较旧的数据,我想查看某个日期的库存,即01/01/2010. 是否有捷径可寻?

谢谢

4

1 回答 1

3

无需以这种方式使用 bit 或 int 标志,只需将 dispatched 更改为日期或日期时间(可为空 - null 将等同于您当前的 0)。然后您可以查询您想要的任何日期比较。

虽然对代码的更改应该相当简单,但如果您无法更改已调度的列,则有一些不太吸引人的替代方案:

  • 添加另一个可为空的列来跟踪日期时间。
  • 添加一个 DispatchedAt 表,其中包含一个非空日期时间和一个引用当前表的外键约束(经典 1NF)。
  • 添加一个包含系统生成的日期时间的“存档表”,用主表上的触发器填充它。
  • 以您喜欢的方式创建一个新表,并创建一个模仿旧表(具有相同名称)的可更新视图以“欺骗”您的应用程序。

如果这不仅仅是一个新功能,而且历史数据非常重要(监管审计?),您可能会检查您的事务日志或备份以查看何时进行了更改,但这样的解决方案将属于 DBA.SE。

于 2013-02-14T16:22:31.380 回答