我的数据包含下表:
表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 :(得分:0)
使用GROUP BY
和MIN
功能,这是一个简单的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 by
和table1(id, start_date)
上的索引。