4

1 日あたりの値を表示する必要があるレポートを作成しています。クエリの開始日と終了日はわかっていますが、テーブルに特定の日付の値が含まれていない場合に備えて、日数が失われないようにしたいと考えています。開始から終了までのすべての日を保持する基本日付範囲テーブルを作成し、それをデータテーブルと結合して各日の値を表示することを考えていました。

mySQL、SQL Server などのスクリプトはいくつか見つかりましたが、SQLite のスクリプトは見つかりませんでした。テーブルに日付範囲をすばやく入力する方法はありますか?

ありがとう

4

2 に答える 2

3

数値テーブルを使用して範囲を拡張する方法は次のとおりです。

SELECT
  datetime('now', N || ' seconds') AS DT
FROM numbers
WHERE N < strftime('%s', 'now', '1 minutes') - strftime('%s', 'now');

この場合、数値テーブルは 0 から始まる数値を保持することになっています。

数字の表は、多くの目的で手元に置いておく価値のあるツールです。たとえば、次のように初期化できます。

CREATE TABLE numbers (N int);
/* #0 */ INSERT INTO numbers (N) SELECT 0;
/* #1 */ INSERT INTO numbers (N) SELECT N + C FROM numbers, (SELECT COUNT(*) AS C FROM numbers);
/* #2 */ INSERT INTO numbers (N) SELECT N + C FROM numbers, (SELECT COUNT(*) AS C FROM numbers);
/* #3 */ INSERT INTO numbers (N) SELECT N + C FROM numbers, (SELECT COUNT(*) AS C FROM numbers);
/* #4 */ INSERT INTO numbers (N) SELECT N + C FROM numbers, (SELECT COUNT(*) AS C FROM numbers);
/* #5 */ INSERT INTO numbers (N) SELECT N + C FROM numbers, (SELECT COUNT(*) AS C FROM numbers);
/* #6 */ INSERT INTO numbers (N) SELECT N + C FROM numbers, (SELECT COUNT(*) AS C FROM numbers);
/* #… */

すべての行はテーブルの2 N行になり、最大数は#N2N-1

メソッドのデモンストレーションはSQL Fiddle にあります。

于 2012-04-30T08:27:23.047 に答える
0

必要な詳細のレベルによって異なります。A から B までの日付だけが必要な場合は、次のようにします。

declare @start datetime
set @start = '04/20/2012'
while @start <getdate() begin
  print @start
  set @start = dateadd(dd,1,@start)
end

プリントをテーブルのインサートに変更するだけです。

詳細が必要な場合は、より複雑なスクリプトが必要になる場合があります。いくつかご紹介しますが、要件をより具体的にしてください

于 2012-04-29T18:24:23.597 に答える