2016-05-24 7 views
0

データベースから日付別に年次データを取得しようとしていますが、前年が休日になるとその行はNULLです。たとえば、5/25/15は、今年の5/23/16の前年と同じ日です。しかし、5/25/15がメモリアルデー(Memorial Day)だったので、行を作成することさえできませんでした。だから、私は最後の利用可能な営業日からデータを引き出すためのソリューションが必要です。過去の営業日/年がNULLからNULL

何か助けてください?

from thisyear 
join prevyear on thisyear.mmdd = prevyear.mmdd 

つまりはあなたのような何かをしなければならないとき、正確に同じ月と日に参加:

+0

現在のクエリはどのように見えますか?また、これらのタイプのクエリのためのカレンダーテーブルを持つことは有用かもしれません。 – SQLChao

+0

ようこそStackoverflowへ。詳細については、ここで説明されているように質問が完了していることを確認してください。http://stackoverflow.com/help/mcveあなたは完全な質問についてより迅速かつ適切な回答を得るでしょう。 – tfv

答えて

1

明らかにあなたは、このような何かをやっている最も近い月を検索

from thisyear 
cross apply 
(
    select top(1) * prevyear 
    where thisyear.mmdd >= prevyear.mmdd 
    order by prevyear.mmdd desc 
) prevyear 

すなわちと同じ日の前に、または同じ日にさえあった。

+0

今日の日付を見て、その日がNULLでない限り、データベースに行き、前年の同じ日のデータをプルして、データで次の前営業日のデータをプルします(データが存在しない休日が見落とされます)。 )。 – Pam

+0

同じ日ではない...同じ日 – Pam

+0

同じことですが、可能な限り近いように月と日の降順で並べ替えられたTOP(1)クエリを使用してください。 –