2016-08-20 48 views
0

我有一個數據如下表:MySQL的使用相同ID行合併,同時保留時間戳

表1:

ID   START_DATE     END_DATE 
--   ----------     -------- 
1  2016-08-20 00:01:00    NULL 
1  2016-08-20 00:02:00    NULL 
1    NULL    2016-08-20 00:03:00 
1    NULL    2016-08-20 00:04:00 

我想爲獨特的ID 1,以便以「合併」數據我可以輕鬆閱讀它。它應該看起來像下面的(基本上抓住了START_DATE爲END_DATE最早的時間戳和最新的時間戳):

表2:

ID   START_DATE     END_DATE 
--   ----------     -------- 
1  2016-08-20 00:01:00  2016-08-20 00:04:00 

這最終讓我能確定以下TX_ID記錄落入START_DATE和END_DATE,並將FALL_WITHIN_START_AND_END參數設置爲True。

表3:

TX_ID   TIMESTAMP   FALL_WITHIN_START_AND_END 
-----   ---------   ------------------------- 
123456 2016-08-20 00:02:35    True 

可能有人推薦一個MySQL查詢「合併」表1的值,使得它看起來像表2?這樣我可以更輕鬆地確定表3中的TX_ID是否落在完整的開始和結束日期範圍內。

非常感謝您的幫助!

回答

0

Barmar對您的問題的第一部分有一個很好的方法。但是,對於完整的答案,你可以使用exists

select t3.*, 
     (case when exists (select 1 
          from table1 t1 
          where t1.id = t3.id and t1.start_date <= t3.timestamp 
         ) and 
        exists (select 1 
          from table1 t1 
          where t1.id = t3.id and t1.end_date >= t3.timestamp 
         ) 
      then 1 else 0 
     end) as fall_within_start_and_end 
from table3 t3; 

這種方法在group by的優點是,它可以採取table1(id, start_date)table1(id, end_date)優勢指標。

0

這是一個簡單的GROUP BY使用MINMAX函數。

SELECT id, MIN(start_date) AS start_date, MAX(end_date) AS end_date 
FROM Table1 
GROUP BY id 
相關問題