Php 按支腿分组,但也在属于最早收集时间的站点上加入
我需要做以下工作。 我有9条记录被一个日程表id链接。 这9条记录分为3组,共3组,例如第1组第2组和第3组, 所以我有以下几点Php 按支腿分组,但也在属于最早收集时间的站点上加入,php,mysql,Php,Mysql,我需要做以下工作。 我有9条记录被一个日程表id链接。 这9条记录分为3组,共3组,例如第1组第2组和第3组, 所以我有以下几点 order sched leg site date 1 1 1 1 2014-01-01 2 1 2 34 2014-12-31 3 1 1 15 2014-04-23 4 1 3 4 2014-07-12 5 1 2 89
order sched leg site date
1 1 1 1 2014-01-01
2 1 2 34 2014-12-31
3 1 1 15 2014-04-23
4 1 3 4 2014-07-12
5 1 2 89 2014-04-10
6 1 1 13 2014-09-09
7 1 3 9 2014-03-12
8 1 3 10 2014-11-10
9 1 2 11 2014-08-08
在我的sql中,我按腿分组,因此我得到了3条记录。
我需要提取每个分支组中最早和最晚日期的站点ID,然后将我的站点信息表加入到生成的ID中,以提取这些站点的CompanyNames等
我的腿部sql代码如下
select l.leg_no,
l.start_region,
r.region_name as end_region,
l.rate,
sum(x.est_distance) as distance,
sum(x.est_weight) as weight,
count(x.order_id) as count,
min(x.req_col_time) as earliesttime,
sum(x.total_rpb) as total_rpb,
max(x.req_del_time) as latesttime from
(select ord2.* from loads as l1
left join orders as ord2 on ord2.load_id = l1.load_id
left join debrief_docs as db2 on db2.oid = ord2.order_id
where l1.schedule_id = '.$id.'
union
select ord3.* from loads as l2
left join drops as drop1 on drop1.load_id = l2.load_id
left join orders as ord3 on ord3.drop_id = drop1.drop_id
left join debrief_docs as db3 on db3.oid = ord3.order_id
where l2.schedule_id = '.$id.')as x
join loads as l on l.schedule_id = '.$id.'
join regions as r on r.region_id = l.region_id
group by l.leg_no asc
任何关于如何实现这一目标的想法都将不胜感激
谢谢大家让我们进入问题的重要部分,即获取每个分支组的第一个和最后一个站点ID。为此,我将使用变量。以下查询枚举了分支ID:
select l.*,
(@rn := if(@l = leg_id, @rn + 1,
if(@l := leg_id, 1, 1)
)
) as seqnum
from loads l cross join
(select @rn := 0, @l := 0) vars
order by schedule_id, leg_id, date;
以下内容总结了记录并生成两列,第一列和最后一列:
select schedule_id, leg_id,
max(case when seqnum = 1 then site_id end) as first_site,
max(case when seqnum = 3 then site_id end) as last_site
from (select l.*,
(@rn := if(@l = leg_id, @rn + 1,
if(@l := leg_id, 1, 1)
)
) as seqnum
from loads l cross join
(select @rn := 0, @l := 0) vars
order by schedule_id, leg_id, date
) l
group by schedule_id, leg_id;
然后,您可以加入其余的表,以获得所需的其他信息。WOW。我得承认我不知道你刚才描述了什么。我向你们致敬,感谢你们在这个层次上理解mysql。我能请你帮我把它分解一下吗?@TerenceBruwer。我想是的。运行第一个查询,注意seqnum列does(它枚举具有相同
schedule\u id
和leg\u id
的行)。然后运行第二个查询,看看它能做什么(它会根据您的逻辑获取第一个和最后一个站点ID)。然后我将感谢您的回答,并承认我的mysql知识水平没有达到我能够理解您的代码的水平。