FC2ブログ
クエリで時系列で保持されてる変更ログからある特定の日のデータを取得したい
SQLServerならこんな感じかな。

declare @checkedDate datetime;
set @checkedDate = '2099/1/1';

-- Logs 変更履歴テーブルとでもしといてくれ!
-- Id 変更履歴テーブルの行の一意を示す列(数値の連番)
-- Code 何かしらの記号
-- LogDate 変更日

select *
from Logs as log1
where log1.Code = 1
and log1.Id = (select max(log2.Id)
from Logs as log2
where log2.LogDate <= @checkedDate
and log2.Code = ca1.Code )

相関サブクエリっていうのかな?を使って、特定の日より前に追加された最新のログIDを取得し、それを比較対象として使うことで、特定の日のとある行を取得できるわけだ。
説明が下手くそすぎだな・・・('A`)y~~~

テーブルにIDのような一意のものがない場合には、行にランク付をするといい。
次のような感じ。

select dense_rank() over (order by LogDate) as Id, * from Logs

仮想テーブルでも作って、一時的にそこに入れてあげると幸せになれるかも。
ログテーブルが膨大だと洒落にならんかもしれんが('A`)y~~~
スポンサーサイト
TOP
プロフィール

hssamurai

Author:hssamurai
FC2ブログへようこそ!

最新記事
最新コメント

最新トラックバック

月別アーカイブ
カテゴリ