3

皆さん、こんにちは。SQL を使用して分析を行って数日が経ちましたが、フォーラムのおかげで解決できるあらゆる種類の問題に遭遇しました。

ここで、時間間隔を回復し、この間隔の日付を詳細に表示するビューを作成したいと思います。

次の表があります。

ここに画像の説明を入力

そして、結果を表示するビューを作成したいと思います:

ここに画像の説明を入力

たとえば、player1 の MyTable では、2012 年 1 月 1 日から 2012 年 5 月 1 日までの 5 日間をプレイします。そのため、ビューには player1 の日付が 01/01/2012、02/01/2012、03/01/2012、04/01/2012、05/01/2012 の 5 行が表示されます。

よろしくお願いいたします。

4

2 に答える 2

4

日付範囲を指定する一般的なテーブル式を作成する必要があります (現在の月の日付範囲を作成しましたが、別の範囲を選択できます)。

WITH DateRange(dt) AS
(
SELECT CONVERT(datetime, '2012-01-01') dt
UNION ALL
SELECT DATEADD(dd,1,dt) dt FROM DateRange WHERE dt < CONVERT(datetime, '2012-01-31')
)

SELECT dates.dt AS DatePlaying, PlayerName 
FROM MyTable t
JOIN DateRange dates ON dt BETWEEN t.BeginDate AND t.DateEnd
ORDER BY PlayerName, DatePlaying 
于 2012-05-27T10:05:49.410 に答える
0

これに対するもう 1 つのアプローチは、単純に列挙テーブルを作成して日付に値を追加することです。

with enumt as (select row_number() over (order by (select NULL)) as seqnum
               from mytable
              )
select dateadd(d, e.seqnum, mt.DateBegin) as DatePlaying, mt.PlayerName
from MyTable mt join
     enum e
     on enumt.seqnum <= e.NumberOfPlayingDay

"with" 句の唯一の目的は、1 から始まる整数のシーケンスを生成することです。

于 2012-05-27T13:21:39.540 に答える