MySQL合并具有相同ID的行,同时保留时间戳

时间:2016-08-20 20:09:38

标签: mysql join merge timestamp

我的数据包含下表:

表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是否落在完整的开始和结束日期范围内。

提前感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

使用GROUP BYMIN功能,这是一个简单的MAX

SELECT id, MIN(start_date) AS start_date, MAX(end_date) AS end_date
FROM Table1
GROUP BY id

答案 1 :(得分:0)

对于问题的第一部分,巴马尔有一个很好的方法。但是,对于完整答案,您可以使用user.tweets.order(created_at: :desc).limit(5)

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 bytable1(id, start_date)上的索引。