中级农民
- 积分
- 182
- 大米
- 颗
- 鳄梨
- 个
- 水井
- 尺
- 蓝莓
- 颗
- 萝卜
- 根
- 小米
- 粒
- 学分
- 个
- 注册时间
- 2017-10-25
- 最后登录
- 1970-1-1
|
you are welcome
drop table buses, passengers;
create table buses (bus_id int primary key, origin varchar not null, destination varchar not null, time varchar not null, unique(origin, destination, time));
INSERT INTO buses (bus_id, origin, destination, time) VALUES
(10, 'W', 'B', '10:55'),
(20, 'B', 'P', '06:20'),
(21, 'B', 'P', '14:00'),
(22, 'B', 'P', '21:40'),
(30, 'P', 'M', '13:30');
. ----
create table passengers (pass_id int primary key, origin varchar not null, destination varchar not null, time varchar not null);
INSERT INTO passengers (pass_id, origin, destination, time) VALUES. .и
(1, 'P', 'M', '13:30'),
(2, 'P', 'M', '13:31'),
(10, 'W', 'P', '10:00'),
(11, 'W', 'B', '22:31'),
(40, 'B', 'P', '06:15'),
(41, 'B', 'P', '06:50'),
(42, 'B', 'P', '07:12'),
(43, 'B', 'P', '12:03'),
(44, 'B', 'P', '20:00');.1point3acres
select b.id, count(p.id) from buses b join passengers p on p.origin = b.origin and p.destination = b.destination and p.time <= b.time group by b.id order by b.id
-- 对每一个passager来说,最小的bus arrival time 就是他要乘的
with tmp as (
select p.pass_id, min(b.time) as boarding_time
from buses b join passengers p on p.origin = b.origin and p.destination = b.destination and p.time <= b.time
group by p.pass_id
order by p.pass_id)
select b.bus_id as id, count(pass_id)
from buses b
left join tmp
on b.time = tmp.boarding_time
group by id
order by id |
|