資料庫時間段合併

2021-08-27 19:10:41 字數 2417 閱讀 6491

資料庫時間段合併

專案中遇到乙個有意思的業務需求,涉及到時間區間的合併與拆分;簡化描述一下:

假定系統中有兩類使用者:甲方,

暫稱債務人;

乙方,暫稱為債權人

債務人和債權人之間可以生成許多實體物件;若當債務人與指定的債權人簽訂協議後,就意味著雙方存在了關係,此時就要求對關係雙方的實體物件打上標記,標記分三種,分別為:當前、已終止、沒關係(空

)。大概就是這個意思,當然實際中還有其它細節,這裡就撿主要意思說。

補充說明一下:因債務人針對每一筆協議可選擇多個債權人,為體現其一對多關係,所以設計了兩張表,協議表協議-債權人表。其中,協議可以是未來生效的協議,並且債務人針對同一債權人可以上傳多筆協議,能自由維護債權人列表

(即:新增和剔除債權人)。

庫表:協議表(b_refactor_finance)

name

type

comments

refactorfincode

varchar2(28)

協議編號

debtororgcode

varchar2(30)

債務人begindate

date

協議起始日

enddate

date

協議到期日

createddate

date

建立時間

協議-債權人表(b_refactorfin_creditors)

name

type

commentsid

number(27) 序號

refactorfincode

varchar2(28)

協議編號

creditororgcode

varchar2(30)

債權人status

varchar2(1)

使用者狀態

(0-啟用

,1-停用)

createddate

date

啟用時間

stoppeddate

date

停用時間

初步想法,應該都趨向於採用即時查詢;也就是當需要展示標記時,即時判斷實體的生成時間是否落在某筆協議內,然後再判斷協議是否當前有效

(即當前時間位於協議起始之間

) 就能夠把三種標記區分開來。

但實際業務中可能存在另一種情形

(如圖一):

假定當前時間為

10月,雙方第一筆協議起始時間為

1 - 6

月;在這期間債權人上傳了一筆賬款,從當前來看,此賬款標識應為關係已終止;若又存在另一筆協議起始時間為

4 - 12

月,此時雙方關係的時段就應算這兩筆協議時段的合併,即

1 - 12

月,賬款標記為當前關係。

也就是當協議時段存在重疊時,會導致關係時段被擴充套件,原打上的標記就不對了。

為解決此問題,需新加一張債務/債權人關係表,記錄雙方的關係區間。當協議相交時則合併;反之,協議終止則拆分。

庫表:債務人/債權人關係表(b_refactorfin_c_d)

name

type

comments id

number(27) 序號

debtororgcode

varchar2(30)

債務人creditororgcode

varchar2(30)

債權人begindate

date

關係起始日

enddate

date

關係到期日

關係時段維護思路:(新增協議和協議終止實則為債權人被加入或移出協議的過程)

關係維護流程圖

附件為oracle

過程**

SQLite資料庫的時間和時間段操作

sqlite資料庫的時間和時間段操作 sqlite資料庫,日期的字段是char。也許設定為別的資料型別更好一些。內容格式為 yyyymmdd,比如 20171230,表示2017年12月30日。查詢某一天 select from table name where date like 20171230...

Qt 資料庫 sqlite 根據時間段查詢

感謝許多大佬的 分享,讓我學了很多。剛剛開始寫的不完美的方法,這是我成功的,希望和大家學習 1.query方法 qvector 類名 get qstring start,qstring end return v 返回乙個vector start,end是得到的時間 2.qsqltable方法 qsq...

根據時間段查詢資料

開發工具與關鍵技術 mvc 在我們做專案的時候,我們有時需要查詢一部分的資料,由於可能在 中的資料有成千上萬條資料,我們不可能一一的根據單條資料去查詢。在這個時候我們可以根據一段時間段去查詢資料。先說說這種做法的邏輯。我們在資料庫那邊在我們需要操作的表中必須要有乙個時間的字段。然後我們在專案中獲取乙...