データベース内のタイムスタンプ付きデータの概要
1981 ワード
データベース内のタイムスタンプ付きデータの概要
データベースはますます広く運用され、データテーブルの時間付きデータ記録もますます一般的になっています.次に、データテーブルにおける類似の「歴史的変化状況」のデータセットを一連のまとめを行い、自分の参考として、他の人に共有し、一緒に学習し、進歩させる.第一(背景):タイムスタンプ付きデータテーブル構造(以下、歴史的発展データと略称する)とは、一般人員履歴記録(history)プライマリ・キーid人員(staf_id)単位または学校(comp_id)を例示する.開始時間(startdate)職場(post)給与(salary)/毎日1 s 1 c 1 2011-11-11 p 1 100 2 s 2 c 2 2012-12-12 p 2 200 3 s 1 c 3 2013–01-01 p 3 300 4 s 3 c 1 2010-10 p 4 222...100000 s 888 c 666 2017-03-16 p 1 1111第2(定義)上記に類似しています.......歴史的発展データとして定義された3番目の操作:操作を容易にするために、終了日付きビュー(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 startdate B; select salary from history a where startdatedd(3)ある人の前後給与の比較状況を問い合わせるA:select salary、(select salary from history b where b.staf_id=a.staf_id and b.startdate=(selectmin(startdate)from history c where c.staf_id = a.staf_id and startdate>a.startdate))as salary 2 from history aの問題が拡張され、同じ日に2つのレコードがどのように処理する必要があるかが存在する場合:idを2番目のルールとして(同じ日の場合は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
データベースはますます広く運用され、データテーブルの時間付きデータ記録もますます一般的になっています.次に、データテーブルにおける類似の「歴史的変化状況」のデータセットを一連のまとめを行い、自分の参考として、他の人に共有し、一緒に学習し、進歩させる.第一(背景):タイムスタンプ付きデータテーブル構造(以下、歴史的発展データと略称する)とは、一般人員履歴記録(history)プライマリ・キーid人員(staf_id)単位または学校(comp_id)を例示する.開始時間(startdate)職場(post)給与(salary)/毎日1 s 1 c 1 2011-11-11 p 1 100 2 s 2 c 2 2012-12-12 p 2 200 3 s 1 c 3 2013–01-01 p 3 300 4 s 3 c 1 2010-10 p 4 222...100000 s 888 c 666 2017-03-16 p 1 1111第2(定義)上記に類似しています.......歴史的発展データとして定義された3番目の操作:操作を容易にするために、終了日付きビュー(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 startdate B; select salary from history a where startdatedd(3)ある人の前後給与の比較状況を問い合わせるA:select salary、(select salary from history b where b.staf_id=a.staf_id and b.startdate=(selectmin(startdate)from history c where c.staf_id = a.staf_id and startdate>a.startdate))as salary 2 from history aの問題が拡張され、同じ日に2つのレコードがどのように処理する必要があるかが存在する場合:idを2番目のルールとして(同じ日の場合は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