2017-02-23 46 views
0

我有一個臨時表,其中有一個主查詢的結果,其中所有記錄都被轉出。但是,有兩個日期字段,當它們不匹配時,不能轉換爲單行。當DATEDIFF> 3時合併兩行

我正在檢查它們之間是否有大於3天的差異,如果有,那麼我需要刪除最早的日期並將其餘的列合併在一起。

我使用SQL Server 2014

示例表

 
+--------------+-------------+-------------------------------+ 
|  Lname | Date1 |  idCode1 | idCode2 | 
+--------------+-------------+-------------------------------+ 
| Higgins | 11/30/16 | 9008 2172 |  NULL  | 
| Higgins | 12/31/16 |  NULL  | 4007 3589 |    
| Shaffer | 11/15/16 | 9000 1541 |  NULL  | 
| Shaffer | 11/21/16 |  NULL  | 7889 9412 | 
+--------------+-------------+-------------------------------+ 

需要尋找這樣的。

 
+--------------+-------------+-------------------------------+ 
|  Lname | Date1 |  idCode1 | idCode2 | 
+--------------+-------------+-------------------------------+ 
| Higgins | 12/31/16 | 9008 2172 | 4007 3589 |    
| Shaffer | 11/21/16 | 9000 1541 | 7889 9412 | 
+--------------+-------------+-------------------------------+ 

回答

1

除非我失去了一些東西,一個簡單的GROUP BY應該這樣做(假設你只是要獲得最大的2行每個L-NAME):

創建和填充示例表(拯救我們這一步在你未來的問題)

DECLARE @T AS TABLE 
(
    Lname varchar(10), 
    Date1 date, 
    idCode1 varchar(20), 
    idCode2 varchar(20) 
) 

INSERT INTO @T VALUES 
('Higgins', '11/30/16', '9008 2172', NULL ), 
('Higgins', '12/31/16', NULL  , '4007 3589'),    
('Shaffer', '11/15/16', '9000 1541', NULL ), 
('Shaffer', '11/21/16', NULL  , '7889 9412') 

查詢:

SELECT LName, 
     MAX(Date1) As Date1, 
     MAX(IdCode1) As IdCode1, 
     Max(IdCode2) As IdCode2 
FROM @T 
GROUP BY LName 
HAVING DATEDIFF(DAY, MIN(Date1), MAX(Date1)) > 3 

結果:

LName  Date1     IdCode1   IdCode2 
Higgins  31.12.2016 00:00:00  9008 2172  4007 3589 
Shaffer  21.11.2016 00:00:00  9000 1541  7889 9412