【发布时间】:2013-11-15 06:03:36
【问题描述】:
我有一个用于跟踪物理对象位置的数据库,我们称它们为小部件。它有一个审计跟踪表,用于跟踪小部件何时被放置在某个位置,以及何时离开某个位置(以及之后它去了哪里)。
所以概念上看起来像这样
Widget ID Date Old Location New Location
1 01-Oct-2013 NULL 101
1 03-Oct-2013 101 108
1 08-Oct-2013 108 101
2 01-oct-2013 NULL 101
2 02-Oct-2013 101 103
3 12-oct-2013 NULL 101
我希望能够查询在开始日期和结束日期(例如 2013 年 10 月 8 日至 9 日)之间位于位置 101 的小部件列表,这应该是小部件 1,而不是小部件 2 或 3。
我不确定如何获得所有这些案例。我可以提取在结束之前移入的小部件列表,以及在开始之前移出的小部件列表,但这也会在小部件 1 离开和返回时消除它。
我想我需要将其转换为包含小部件、位置、进入日期和退出日期的表格,但我不知道该怎么做?
编辑:正如所指出的,我的数据是错误的,我已经更新以将问题设为第 8 到第 9(这是第 4 到第 5)。所以小部件 1 是那个时期位置 101 中唯一的小部件。
【问题讨论】:
-
您想知道小部件是在周期结束时进入还是离开?
-
我想知道该小部件是否在该期间的任何时间都在该位置
-
因此,您需要找到至少 1 条记录,其中新位置为 101,日期在期间内 - 对于每个小部件 ID。请检查我的答案中的更新。
-
@PaulHurleyuk,你为什么期望
04-05 Oct 2013得到 1?如果我理解正确,那么小部件 1 位于位置 101,从1-oct到3-Oct -
@A.B.Cade,你完全正确,我真的很抱歉!我已将问题改写为要求第 8 到第 9,因此小部件 1 位于该位置。也感谢您的解决方案,我会试一试...
标签: sql oracle audit-tables