最も近いデータで記録するためのSQL更新
-
06-07-2019 - |
質問
SQL Server 2008の場合:
2つのテーブルがあるとします。
Table1には、Name、Date1、Date2の3つのフィールドがあります。現在、Date2エントリはすべてNULLです。 (名前、Date1)が一意のキーを形成します。
Table2には、NameとDate2の2つのフィールドがあります。 (Name、Date2)は一意のキーを形成します。
すべての" Name" Table1には、Table2に対応するエントリが少なくとも1つあります。
ここで、Table1のすべてのDate2エントリ(現在はすべてNULLであることを思い出してください)を、Table1のDate1に最も近いであるTable2のDate2エントリに更新します。つまり結果が得られる日付:
min(datediff(dd,Table1.Date1,Table2.Date2))
明確にするために、次のエントリがある場合:
表1:
[名前]:カール、[日付1]:2009年1月1日、[日付2]:NULL
表2:
[名前]:カール、[日付2]:2000年1月1日
[名前]:カール、[日付2]:1/7/2009
[名前]:カール、[日付2]:2010年1月1日
その後、Table1.Date2を「2009年1月1日」に最も近い日付である「2009年1月7日」に更新します。
どうもありがとう
カール
解決
WITH abcd AS
(
SELECT t1.Name,t1.Date1, t2.Date2
,RANK() OVER (ORDER BY ABS(DATEDIFF(dd, t1.Date1, t2.Date2)) ASC) AS rnk
FROM
Table1 AS t1
JOIN Table2 AS t2 ON t1.Name = t2.Name
)
UPDATE Table1 SET
[Date2] = (SELECT TOP(1) [Date2] FROM abcd WHERE rnk = 1)
他のヒント
UPDATE Table1
SET Date2 = t2.Date2
FROM Table1 t1
JOIN Table2 t2
ON t1.Name = t2.Name
AND ABS(DATEDIFF(d, t1.Date1, t2.Date2)) = (SELECT MIN(ABS(DATEDIFF(d, t1.Date1, t2.Date2)))
FROM Table1 t1
JOIN Table2 t2
ON t1.Name = t2.Name
)
ABS
が必要かどうかを確認します-必要だと思います。
また、クエリはTable2にDate1までの距離が異なるが2つの異なる日付がある2つの日付がある場合を処理しません。
所属していません StackOverflow