我們有一個系統監視表中記錄的字段更改,我們將其稱爲歷史記錄。在這種情況下,我專注於一個字段的狀態和另一個字段提供的日期值。當某些現場條件得到滿足時獲取日期時間值
每當一個記錄被保存在一個新的行爲,相對於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命令語言)。這有幫助嗎?該示例數據中的 –
,「預期結果」是什麼? –