例えば下記のようなテーブルがあった場合に、そのまま利用してもいいですが更新処理を効率化するために差分のみを用意することを考えてみます
2014 年 4 月のブログ投稿記事カテゴリー内訳(BlogTags テーブル)
こんな感じに
この場合、任意の投稿日時点の状況を次のような SQL で問い合わせることができます
SELECT MAX([投稿日付]) '投稿日付', MAX([MVPVM]) 'MVPVM', MAX([猫]) '猫', MAX([その他]) 'その他' FROM [dbo].[BlogTags] WHERE [投稿日付] < DATEFROMPARTS(2014,04,20);
問い合わせ結果はこの通り
ただ、これだとカテゴリーが増えたときにデータ更新がめんどくさいのでさらにテーブル構成を次のように変更します
問い合わせを次のように変更すると
SELECT X.[投稿日付] '投稿日付', X.[分類] '分類', X.[値] '値' FROM [dbo].[BlogTags2] X INNER JOIN (SELECT MAX(投稿日付) '投稿日付', [分類] FROM [dbo].[BlogTags2] WHERE [投稿日付] < DATEFROMPARTS(2014,04,20) GROUP BY [分類]) Y ON X.[投稿日付] = Y.[投稿日付] AND X.[分類] = Y.[分類];
ほぼ同じ結果が得られました