-2

日付とその他の情報を含む最初のテーブル T1 があります。

--TABLE1
date, field1, field2, field3...
20120801 | info1    | info2    | ...
20120802 | info1    | info2    | ...
20120803 | info1    | info2    | ...
20120804 | info1    | info2    | ...
20120805 | info1    | info2    | ...
20120806 | info1    | info2    | ...

営業日と週末の日付関連情報を含む 2 番目のテーブル T2 があります。

--TABLE2
date, businessdayofthemonth, day, field4...
20120801 | 1    | Wednesday | ...
20120802 | 2    | Thursday  | ...
20120803 | 3    | Friday    | ...
20120804 | NULL | Saturday  | ...
20120805 | NULL | Sunday    | ...
20120806 | 4    | Lundi     | ...

今私がやろうとしていること: テーブル 1 のすべての行に対して、特定の日付の後の 3 営業日目に正確に対応するテーブル 2 の日付を取得したい <=> (isnumeric(businessdayofthemonth)=1)

たとえば、T1 の最初の行を選択した場合:

dateT1   | dateT1+3 | TheDateIWant |
20120801 | 20120804 | 20120806     | info1 | info2 | ...

正しく説明したことを願っています、ありがとう

編集: 私はこれを正しく説明していないと思います:特定の日付からちょうど3営業日後の日付が必要です:

為に:

20120803 | 3    | Friday    | ...

次の 3 営業日以内の日付が必要です。

20120808

ところで、なぜ反対票を投じるのですか?私は数十億行のデータベースで作業しています。これは、15 テーブルを超える 300 行のリクエストで行う作業の一部にすぎません。投稿した場合は試してみました。

4

1 に答える 1

3

次のようなことができます。

select t1.date, t1.field1, t1.field2,
    (
        select top 1 date
        from Table2 t2
        where businessdayofthemonth is not null
        order by abs((t1.Date + 3) - t2.Date)
    ) as T2_Date
from Table1 t1

SQL フィドルの例

これにより、 の前後の最も近い日付が得られることに注意してくださいTable1.Date + 3。それ以降の日付のみが必要な場合は、次のことができます。

select t1.date, t1.field1, t1.field2,
    (
        select top 1 date
        from Table2 t2
        where businessdayofthemonth is not null
            and t2.Date >= (t1.Date + 3)
        order by t2.Date - (t1.Date + 3)
    ) as T2_Date
from Table1 t1
于 2012-10-22T15:07:32.240 に答える