私は非常に基本的なSQLユーザーです。私は基本といくつかの中間スキルを知っていますが、私はこの質問を書くことに問題があります。結果セットを使用してエントリ間の日付を生成する
私はヒストリーと呼ばれるテーブルを持っており、それは特定のデータのユニークなエントリを含んでいます。ここでは、この表には、どのように見えるかのストリップダウンバージョンです:私がする必要がどのような
+-------------------------+----+-----------+-------+
| Time | ID | ChangeNum | Value |
+-------------------------+----+-----------+-------+
| 2014-07-03 00:00:00.000 | 3 | 0 | A
+-------------------------+----+-----------+-------+
| 2014-10-02 00:00:00.000 | 3 | 1 | B
+-------------------------+----+-----------+-------+
| 2014-11-27 00:00:00.000 | 3 | 2 | C
+-------------------------+----+-----------+-------+
| 2015-01-15 00:00:00.000 | 3 | 3 | D
+-------------------------+----+-----------+-------+
| 2015-02-14 00:00:00.000 | 3 | 4 | E
+-------------------------+----+-----------+-------+
| 2015-09-02 00:00:00.000 | 3 | 5 | F
+-------------------------+----+-----------+-------+
| 2015-09-04 00:00:00.000 | 3 | 6 | G
+-------------------------+----+-----------+-------+
| 2016-09-13 00:00:00.000 | 3 | 7 | H
+-------------------------+----+-----------+-------+
| 2016-09-14 00:00:00.000 | 3 | 8 | I
+-------------------------+----+-----------+-------+
| 2017-02-12 00:00:00.000 | 3 | 9 | J
+-------------------------+----+-----------+-------+
| 2017-02-18 00:00:00.000 | 3 | 10 | K
+-------------------------+----+-----------+-------+
すると、同じ値の残りの部分を維持しながら、これらの日付範囲の間でデータを生成し、ビューを作成しています。例えば、ここにテーブルが
+-------------------------+----+-----------+
| Time | ID | ChangeNum |
+-------------------------+----+-----------+
| 2014-07-03 00:00:00.000 | 3 | 0 |
+-------------------------+----+-----------+
| 2014-07-04 00:00:00.000 | 3 | 0 |
+-------------------------+----+-----------+
| 2014-07-05 00:00:00.000 | 3 | 0 |
+-------------------------+----+-----------+
| 2014-07-04 00:00:00.000 | 3 | 0 |
+-------------------------+----+-----------+
| truncated for readability ... |
+-------------------------+----+-----------+
| 2014-10-01 00:00:00.000 | 3 | 0 |
+-------------------------+----+-----------+
| 2014-10-02 00:00:00.000 | 3 | 1 |
+-------------------------+----+-----------+
どのように見えるかのサブセットです私はCTEを使用して、日付範囲を生成することができ、このような記事を見てきました、それは十分に簡単です。ただし、履歴表の結果セットをループしてを実行し、日付範囲の下限と上限を取得し(最初の行の時間フィールド、次に次の行の時間フィールド)、これらの間にデータを生成します行。これは私がそれを見せるより簡単かもしれませんが、私は少し失われています。私の最初の考えは、カーソルを使用することでしたが、私はテーブルの遅れ/先導という文脈でこれをどうやって行うのか正確には分かりません。どんな助け?ありがとう。私はあなたの例のデータに基づいて、いくつかの仮定を作ってるんだけれどもここ
あなたは間違いなくこのためのカーソルは必要ありません。タリーテーブルが必要です。 –
2つの答えは、私が聞いたことのない集計表を使用しています。正規のSQL構文を使用してこれを達成できますか?(例:変数やテーブル作成を使用しない)また、これは「ギャップとアイランド」の解決策の良い候補ではないのですか、間違っていますか? – psrpsrpsr
@ psrpsrpsr私の答えは集計表を使用していませんが、変数や集計表なしでこれを行うことはできません。欠落している日付レコードを作成するには、どちらか一方が必要になります。 –