-2

次のようなテーブルがあります。

date         name     lookback_date
1995-01-31   T1       1994-10-24
1995-01-30   T1       1994-10-23
1995-01-29   T1       1994-10-22
1995-01-31   T2       1994-10-24
1995-01-30   T2       1994-10-23
1995-01-29   T2       1994-10-22
1995-01-31   T3       1994-10-24
1995-01-30   T3       1994-10-23
1995-01-29   T3       1994-10-22

等々

各レコードの日付と lookback_date の間の名前の数を計算する必要があります

編集:次のような結果が必要です:

 date         name     lookback_date  cnt
1995-01-31   T1       1994-10-24     70
1995-01-30   T1       1994-10-23     69
1995-01-29   T1       1994-10-22     67
1995-01-31   T2       1994-10-24     73
1995-01-30   T2       1994-10-23     65
1995-01-29   T2       1994-10-22     63
1995-01-31   T3       1994-10-24     68
1995-01-30   T3       1994-10-23     66
1995-01-29   T3       1994-10-22     65

入力日付はこのステートメントで取得されます

select date, ticker_name
        ,dateadd(days, -100, date) as lookback_date
from table1
4

1 に答える 1

0

これを試してみてください(私は試していません)

SELECT t1.date, t1.ticker_name, dateadd(days, -100, date) AS lookback_date,
    (SELECT count(ticker_name) AS cnt
     FROM table1
     WHERE date > t1.date
           AND date < dateadd(days, -100, date))
FROM table1 t1

それを行う必要がある SELECT 句で副選択を使用しますが、最適化が必要です。

基本的に、相互に参照する 2 つの select を使用します。1 つは日付範囲の選択を行い、もう 1 つはカウントを行います。次に、それらを FROM 句または SELECT 句で結合します。

FROM 句の方が読みやすく、保守しやすいため、より優れています。

于 2014-05-19T13:05:37.557 に答える