我们有一个系统监视表中记录的字段更改,我们将其称为历史记录。在这种情况下,我专注于一个字段的状态和另一个字段提供的日期值。当某些现场条件得到满足时获取日期时间值
每当一个记录被保存在一个新的行为,相对于record_id
(SK)创建hist_id
(PK)和trans_dt
(SK)创建,具有field_id
,确定受影响的领域一起,field_text
提供现场如果值该字段是文本字段,而如果该字段是日期时间字段,则field_dt
会提供日期时间值。每个保存只记录所做的增量,而不是整个记录。
随着时间的推移用户可能会更新一个字段记录我们称之为“status
”(FIELD_ID = 1)两种状态“A”或“B”,或者什么都没有之一。他们还可能更新某个日期时间的字段“status_dt
”(field_id = 2)。
我想,以确定这两个“status
”字段与状态一个和“status_dt
”字段与日期定义定义的第一点......就在那吐出的status_dt
值时间点。
唯一的问题是,这可以通过以下三种方式之一发生:
- 的“
status
”场第一次进入,记录保存,然后将“status_dt
”进入,然后记录保存。 - 首先输入“
status_dt
”字段,保存记录,然后输入“status
”,然后保存记录。 - 同时输入“
status
”字段和“status_dt
”,然后保存记录。
此外,“status
”字段可以在“A”和“B”之间来回翻转;以及“status_dt
”的价值也可以一遍又一遍地改变。
所以可能我们可以得到这样的事情:
hist_id trans_dt record_id field_id field_text field_dt
------- ----------------- --------- -------- ---------- -----------------
1 28/11/16 11:37:56 1 3 N/A
2 09/12/16 11:52:51 1 4 Yes
3 01/01/17 12:45:17 1 2 28/02/17 00:00:00
4 14/07/17 09:01:58 1 1 B
5 14/07/17 09:01:58 1 2 01/07/17 00:00:00
6 14/07/17 09:01:58 1 5 31/07/17 00:00:00
7 14/07/17 11:11:30 1 1 A
所以在这种情况下,在时间点里的“status
”字段(field_id=1
)都与状况的定义和“status_dt
”字段日期定义为hist_id=7
,但我们历史上会回到hist_id = 5
以获取status_dt
日期(其中field_id = 2
)的点,因此,在状态重新定义为时,两个条件都得到满足“ A“;所以代码应该返回01/07/17 00:00:00
有没有一种方法来查询这个日期值的第一个点,其中两个字段(字段1和2)都已定义字段1的状态为“A”,给定可能的三这些字段可以填充的方式?
在此先感谢...
哪个[DBMS](https://en.wikipedia.org/wiki/DBMS)您使用的? Postgres的?甲骨文? –
我目前使用的是借用Oracle的CCL(Cerner命令语言)。这有帮助吗?该示例数据中的 –
,“预期结果”是什么? –