資料庫時間段合併
專案中遇到乙個有意思的業務需求,涉及到時間區間的合併與拆分;簡化描述一下:
假定系統中有兩類使用者:甲方,
暫稱債務人;
乙方,暫稱為債權人
債務人和債權人之間可以生成許多實體物件;若當債務人與指定的債權人簽訂協議後,就意味著雙方存在了關係,此時就要求對關係雙方的實體物件打上標記,標記分三種,分別為:當前、已終止、沒關係(空
)。大概就是這個意思,當然實際中還有其它細節,這裡就撿主要意思說。
補充說明一下:因債務人針對每一筆協議可選擇多個債權人,為體現其一對多關係,所以設計了兩張表,協議表和協議-債權人表。其中,協議可以是未來生效的協議,並且債務人針對同一債權人可以上傳多筆協議,能自由維護債權人列表
(即:新增和剔除債權人)。
庫表:協議表(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 在我們做專案的時候,我們有時需要查詢一部分的資料,由於可能在 中的資料有成千上萬條資料,我們不可能一一的根據單條資料去查詢。在這個時候我們可以根據一段時間段去查詢資料。先說說這種做法的邏輯。我們在資料庫那邊在我們需要操作的表中必須要有乙個時間的字段。然後我們在專案中獲取乙...