我有一个2000万行的表。
每行代表一天+客户。
并非所有的日子都用行表示。
我需要获取一个日期范围,比如说2015年1月1日至2016年1月1日的表,该表将为每个客户从上到2015年1月1日最接近,从下到2016年最接近的行-01-01
表:
所需结果:
总结起来,这是将同一张表中的2行缝合成一行。
仅仅选择和加入就需要永远。查询此数据的正确方法是什么?
最佳答案
有几种方法。也许最简单的方法是使用substring_index()
/ group_concat()
hack:
select client, min(date) as date1, max(date) as date2,
substring_index(group_concat(random order by date), ',', 1) as random1,
substring_index(group_concat(random order by date desc), ',', 1) as random2
from t
where date >= '2015-01-01' and
date < '2016-01-01'
group by client;
给定您的样本数据,这应该可以正常运行。
一种更传统的方法是使用聚合和联接:
select c.client, c.date1, c.date2, t1.random as random1, t2.random as random2
from (select t.client, min(date) as date1, max(date) as date2
from t
where date >= '2015-01-01' and date < '2016-01-01'
group by client
) c join
t t1
on c.client = t1.client and c.date1 = t1.date join
t t2
on c.client = t2.client and c.date2 = t2.date;
这也使添加两个以上的数据列变得更加容易。
关于mysql - SQL-如何拼接同一张表中的两行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36966253/