資料庫中帶時間戳資料總結

2021-09-21 01:52:56 字數 1941 閱讀 5221

資料庫已經運用越來越廣泛,資料表中帶時間的資料記錄也越來越常見,下面對資料表中一種類似」歷史演變情況「資料集進行一系列的總結,供自己參考,供別人分享,一起學習進步。

第一(背景):什麼是帶時間戳的資料表結構(下面簡稱歷史演變資料)

舉例一種通人員履歷記錄(history)

主鍵id 人員(staf_id) 單位或學校(comp_id) 開始時間(startdate) 工作崗位(post) 薪水(salary)/每天

1 s1 c1 2011-11-11 p1 100

2 s2 c2 2012-12-12 p2 200

3 s1 c3 2013–01-01 p3 300

4 s3 c1 2010-10-10 p4 222

…1000000 s888 c666 2017-03-16 p1 1111

第二(定義)類似於上面。。。。。。。。。。。。定義為歷史演變資料

第三(操作)

為了方便操作:建立一張帶終止日期的檢視(v_history)

create view as select a.*,(select min(startdate) from history where startdate>a.startdate) as enddate from history a

(1) 查詢所有人員的當前薪水

a:select salary from history a where startdate = (select max(startdate) from history where staf_id = a.staf_id)

b:select salary from v_history a where endate is null

(2)查詢所有人在某個時間dd的所有資訊

a: select salary from history a where startdate = (select max(startdate) from history where staf_id = a.staf_id and startdatedd

(3)查詢某人的前後薪水對比情況

a: select salary,(

select salary from history b where b.staf_id = a.staf_id and b.startdate=

(select min(startdate) from history c where c.staf_id = a.staf_id and startdate>a.startdate)

)as salary2 from history a

問題擴充套件,如果同一天存在兩條記錄如何處理

需求:按照id作為第二的規則(相同一天的情況將取id較大的記錄,系統預設時間戳排序之後id排序)

select salary,(

select salary from history b where b.staf_id = a.staf_id and b.id=

(select max(id) from history c where c.staf_id = a.staf_id and c.startdate= (

select min(startdate) from history d where d.staf_id = a.staf_id and d.startdate>a.startdate)

))as salary2 from history a

select  salary,(

select salary from history b where b.staf_id = a.staf_id and (b.startdate||b.id)=

(select max(startdate||id) from history c where c.staf_id = a.staf_id and c.startdate>a.startdate)

))as salary2 from history a

oracle資料庫時間戳轉為日期

select to char timestamp 1000 60 60 24 to date 1970 01 01 08 00 00 yyyy mm dd hh24 mi ss yyyy mm dd as createtime from table這裡的原理是用to date函式將字串 1970 0...

資料庫 時間戳 字段資料型別選擇

一般情況下,我們使用 秒 級的時間戳來儲存就ok了.使用 無符號 int 型別 足夠支撐到2103年了 不用擔心int範圍不夠.但是 毫秒 13位 不夠.我們接下來另說.關於 毫秒級的儲存 只能 使用 bigint 資料型別 範圍為 9,223,372,036,854,775,808,9 223 3...

mysql 查詢資料庫時時間戳的轉換

最近在做mysql資料庫匯出為excel,用phpexcel自己封裝了乙個公用類,需要傳遞sql語句進行檢索要匯出的資料。當匯出的資料有時間戳時要讓其自動轉換為時間,經過查閱資料問題已經解決,把涉及到的方法在這裡共享給大家。1 將時間轉換為時間戳 select unix timestamp 2009...