[英]MySQL left join return return only one row
我正在尝试从历史航班表中查找先前的航班,我只有1个飞机的历史表机尾号和计划的日期偏离,我想用该飞机先前的航班信息创建一个新表,下面是示例桌子的
原始表:
|flight number|scheduled departure flight|
| A | 1 Jan 2018 10:00 |
| A | 1 Jan 2018 19:00 |
| B | 1 Jan 2018 11:00 |
| B | 1 Jan 2018 19:00 |
| B | 1 Jan 2018 21:00 |
预期结果:
|flight number|scheduled departure flight| previous scheduled departure |
| A | 1 Jan 2018 10:00 | NULL |
| A | 1 Jan 2018 19:00 | 1 Jan 10:00 |
| B | 1 Jan 2018 11:00 | NULL |
| B | 1 Jan 2018 19:00 | 1 Jan 2018 11:00 |
| B | 1 Jan 2018 21:00 | 1 jan 2018 19:00 |
我已经做了一天了,感谢您的任何帮助
您正在寻找LAG
窗口功能,但支持高于8.0的mysql版本
您可以尝试使用子查询来创建lag
窗口函数。
模式(MySQL v5.7)
查询#1
SELECT `flight number`,
`scheduled departure flight`,
(select `scheduled departure flight`
from T tt
where t1.`scheduled departure flight` > tt.`scheduled departure flight`
AND t1.`flight number` = tt.`flight number`
order by tt.`scheduled departure flight` desc
limit 1
) 'previous scheduled departure'
FROM T t1;
| flight number | scheduled departure flight | previous scheduled departure |
| ------------- | -------------------------- | ---------------------------- |
| A | 2018-06-01 10:00:00 | |
| A | 2018-06-01 19:00:00 | 2018-06-01 10:00:00 |
| B | 2018-06-01 11:00:00 | |
| B | 2018-06-01 19:00:00 | 2018-06-01 11:00:00 |
| B | 2018-06-01 21:00:00 | 2018-06-01 19:00:00 |
如果您的mysql版本支持LAG
,则可以尝试此操作。
模式(MySQL v8.0)
CREATE TABLE T(
`flight number` varchar(5),
`scheduled departure flight` datetime
);
INSERT INTO T VALUES ('A','2018-06-01 10:00');
INSERT INTO T VALUES ('A','2018-06-01 19:00');
INSERT INTO T VALUES ('B','2018-06-01 11:00');
INSERT INTO T VALUES ('B','2018-06-01 19:00');
INSERT INTO T VALUES ('B','2018-06-01 21:00');
查询#1
SELECT `flight number`,
`scheduled departure flight`,
LAG(`scheduled departure flight`) OVER(PARTITION BY `flight number` ORDER BY `scheduled departure flight`) 'previous scheduled departure'
FROM T t1;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.