我正在尝试创建一个查询,通过查看数据的前一个结果来查询下一个结果。
所以我的数据是
Train - Station - Time
158 Station1 11:10
158 Station1 11:11
158 Station1 11:12
158 Station1 11:13
158 Station1 11:14
158 Station2 11:25
158 Station2 11:26
158 Station2 11:27
158 Station3 11:41
158 Station3 11:42
158 Station3 11:43
158 Station3 11:44
158 Station3 11:45
158 Station4 11:50
158 Station4 11:51
158 Station4 11:52
158 Station4 11:53
假设我在“3号站”
我使用以下查询来找出上一个电台是什么:
SELECT * FROM Train
WHERE Train = '158' AND Station NOT LIKE 'Station3'
ORDER BY Time DESC
LIMIT 1
我想查询下一站是什么,但我真的不知道该怎么查询。有什么建议吗?
编辑:好的,假设我的表有更多关于以前列车运行的信息,我想从中检查下一站是什么。
火车站时间
158站1 10:10
158车站1 10:11
158车站1 10:12
158站1 10:13
158车站1 10:14
158车站2 10:25
158站2 10:26
158站2 10:27
158站3 10:41
158站3 10:42
158站3 10:43
158站3 10:44
158站3 10:45
158站4 10:50
158站4 10:51
158站4 10:52
158站4 10:53
158站5 10:55
158站5 10:56
158站6 10:57
158站6 10:58
158站11:10
158车站11:11
158车站11:12
158站11:13
158站11:14
158车站2 11:25
158车站2 11:26
158站2 11:27
158站3 11:41
158站3 11:42
158站3 11:43
158站3 11:44
158站3 11:45
158站4 11:50
158站4 11:51
158站4 11:52
158站4 11:53
159站11:10
159站11:11
159站11:12
159站11:13
159站11:14
159车站2 11:25
159站2 11:26
159站2 11:27
159站3 11:41
159站3 11:42
159站3 11:43
159站3 11:44
159站3 11:45
159站4 11:50
158站4 11:51
159站4 11:52
159站4 11:53
假设我在158次列车4号站11点53分,我不知道下一站是什么,我想查询下一站是5号站。我该怎么做?
3条答案
按热度按时间zvms9eto1#
用一种更简单的方法,使用self
join
可以帮你实现。试试这个:
尝试更改
station
两个表上的值t1
以及t2
你想要的价值是Station3
在这种情况下。现场sql小提琴演示在这里。
ymdaylpp2#
如果你只需要知道下一站,你可以使用一个子查询3号站和158次列车的最长时间
hk8txs483#
另一种方法是先找出站点的最大时间。
MySQL8.0+让lead能够很好地获取下一个记录数据。
查询
请参见演示https://www.db-fiddle.com/f/9ld7xznmeuzndrc3dmysut/1
在较旧的mysql版本中,我们需要更具创造性,因为lead不受支持。
模拟lead的最佳方法是使用mysql的用户变量和一个移位的self-left连接
记住mysql用户变量在mysql 5.1中工作+
查询
请参见演示http://sqlfiddle.com/#!9/ff23fc/38号