문제

SQL Server 2008에서 :

두 개의 테이블이 있다고 가정합니다.

표 1에는 이름, 날짜 1 및 날짜 2의 3 개의 필드가 있습니다. 현재 모든 날짜 2 항목은 NULL입니다. (이름, 날짜 1) 고유 한 키를 형성합니다.

표 2에는 이름과 날짜가 2 개의 필드가 있습니다. (이름, 날짜 2) 고유 한 키를 형성합니다.

표 1의 모든 "이름"은 표 2에 적어도 하나의 상응하는 항목을 갖는다.

이제 표 1의 모든 날짜 2 항목 (지금은 모두 null임을 기억하십시오)을 업데이트하고 싶습니다. 가장 가까운 표 1의 데이트 1. 즉, 결과를 제공하는 날짜.

 min(datediff(dd,Table1.Date1,Table2.Date2))

다음 항목이 있다면 분명하게 말해

1 번 테이블:

이름] : Karl, [date1] : 1/1/2009, [date2] : null

표 2 :

이름] : Karl, [date2] : 1/1/2000

이름] : Karl, [date2] : 1/7/2009

이름] : Karl, [date2] : 2010 년 1 월 1 일

그런 다음 '2009 년 1 월 1 일'에 가장 가까운 날짜이기 때문에 표 1.date2에서 '1/7/2009'를 업데이트하고 싶습니다.

정말 감사합니다

도움이 되었습니까?

해결책

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 - 당신이 그렇게 생각합니다.

또한 쿼리는 DATE1과 동일한 거리를 가진 표 2에 2 개의 날짜가있는 경우가 아니라 다른 측면에서 처리하지 않습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top