質問

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つの日付がある場合を処理しません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top