2013-04-22 11 views
5

私は、BusinessDataDateによって整理されたデータを保持するテーブルをSQL Serverに持っています。 BusinessDataDateは日付のみであり(時間コンポーネントなし)、営業日に設定されます。例えば週末や祝日ではありません。SQLで「次の、しかし最新の」日付を見つける最良の方法は?

これには特定の順序はありませんので、私はこのクエリは動作しますが、私はローカル変数に値を設定することができますdate before the current max date

を見つけたい - しかし、きれいな方法がなければならないようにそれは感じていますか?

SELECT MAX(BusinessDataDate) FROM myTable 
    WHERE BusinessDataDate < (SELECT MAX(BusinessDataDate) FROM myTable) 

各日付には複数の行があります。正確な数値は予測できません。

+2

あなたのアプローチは問題ありません。最後のx日だけをフィルタリングするために、メインとサブクエリの両方にwhere句を追加すると、パフォーマンスが向上する可能性があります。 –

+0

私はそれを試してみるかもしれません...しかし、中東ではあまりにも漠然としています。 Eidは3〜6日で、週末と一致していれば、10日の範囲にすることができます。 – BlueChippy

答えて

2

元のクエリと似ていますが、トップ1の使用はどうですか?

SELECT Top 1 BusinessDataDate 
FROM myTable 
WHERE BusinessDataDate < (SELECT MAX(BusinessDataDate) FROM myTable) 
ORDER BY BusinessDataDate DESC 
+0

外部クエリ –

+0

でORDER BYが必要です。改正された。 – Ric

+0

どうすればいいですか?これにはソートが必要で、元のクエリはソートされません。 – Aryadev

3
SELECT TOP (1) 
    BusinessDataDate 
FROM 
    (
    SELECT 
     BusinessDataDate, 
     DENSE_RANK() OVER (ORDER BY BusinessDataDate DESC) as rn 
    FROM 
     myTable 
    ) x 
WHERE 
    x.rn = 2 
ORDER BY 
    x.BusinessDataDate; 
+0

無効な列名 'x'です。 – BlueChippy

+0

- テーブルに複数の行があります - 正確な行数は日付ごとに異なります。 – BlueChippy

+0

@BlueChippy:次に特定し、ダウンボトムをしないでください。私たちが** – gbn

関連する問題