存在しない場合は値を挿入し、更新された場合は値を挿入するために実行しているストアドプロシージャがあります。私は、データが、データは私が新しいテーブルに名前を挿入しようとしています。この存在する場合は行を更新するストアドプロシージャ
Name1 5 2016-11-16 09:46:40.490
Name2 10 2016-11-16 09:48:35.240
Name1 7 2016-11-16 09:35:24.350
Name2 8 2016-11-15 02:27:44.670
のように見えます
Table1
Name (nvarchar)
Data (int)
Timestamp (datetime)
から来ているテーブルを持って、日別の平均うち、整数、およびグループ。ここに第2のテーブルがあります。
Table2
Name (nvarchar)
Data (int)
Timestamp (date)
データはこのようになります。名前1は同じ日だったので平均化されました。 Name2は異なる日だったので、平均化されていませんでした。
Name1 6 2016-11-16 00:00:00.000
Name2 10 2016-11-16 00:00:00.000
Name2 8 2016-11-15 00:00:00.000
タイムスタンプを日付に変換して、日にちにまとめる方が簡単になるようにしました。私のストアドプロシージャはこのようになります
IF NOT EXISTS (SELECT t.Name, t.Timestamp
FROM Table2 t
JOIN Table1 a
ON t.Name = a.Name AND t.Timestamp = CONVERT(date, a.Timestamp)
GROUP BY t.Name, t.Timestamp)
INSERT INTO Table2 (Name, Timestamp, Data)
SELECT
Name,
CAST(Timestamp AS DATE) as Date,
AVG(Data) as Average_Data
FROM Table1
GROUP BY CAST(Timestamp AS DATE), Name
ELSE
UPDATE Table1
SET
WHERE
私は初めて実行するので、問題はありません。値は正しく追加され、グループ化されます。ただし、2回目の実行時には常に挿入されます。私は
SET Name = Name, Timestamp = Timestamp, Data = Date
WHERE Name = Name, Timestamp = Timestamp
それを削除する前に
私の更新ステートメントは、私は、これは権利ではありません知っているが、それは挿入が常に実行されるようにもアップデートを打つように見えることはありません。このような何かを見ていました。私が「存在しない場合」の選択を実行すると、データが表示され、存在するものとして表示されます。
私はIf Not Existsをクリーンアップし、動作中のUpdate文を作成するのに役立つと思います。
EDIT:
は、私が代わりに連続したUPDATEとINSERTのMERGE文を使用したいと
IF EXISTS(SELECT Name, Timestamp FROM Table2)
UPDATE
Table2
SET
Name = a.Name,
Timestamp = CONVERT(date, a.Timestamp),
Data = AVG(a.Data)
FROM
Table2 t
INNER JOIN
Table1 a
ON t.Name = a.Name
WHERE t.Name = a.Name AND t.Timestamp = CONVERT(date, a.Timestamp)
ELSE
INSERT INTO Table2 (Name, Timestamp, Data)
SELECT
Name,
CAST(Timestamp AS DATE) as Date,
AVG(Data) as Average_Data
FROM Table1
GROUP BY CAST(Timestamp AS DATE), Name
END
あなたのロジックは、あなたがここで必要なものではありません。最初に更新を行い、行が存在するかどうかを確認する必要はありません。更新されていない場合は更新されません。次に、存在しない場所を使用するようにinsertステートメントを変更したいとします。 –
ありがとうございます。私はそのショットを与える – maltman
私は最初に実行するように更新プログラムを変更し、それはまだ毎回値を挿入しているように見えます。タイムスタンプで問題になることはありますか?私はそれを日付に変換していますが、それが変換される前にそれを確認しているのですか? – maltman