5

出発地と目的地の停留所番号を入力するとルートのリストを出力する公共交通システムのクエリを作成しようとしています。

ここに私のMySQLテーブルがあります:

mysql> desc route_timings;
+----------------+---------+------+-----+---------+----------------+
| Field          | Type    | Null | Key | Default | Extra          |
+----------------+---------+------+-----+---------+----------------+
| ID             | int(11) | NO   | PRI | NULL    | auto_increment |
| route_number   | int(11) | NO   |     | NULL    |                |
| stop_number    | int(11) | NO   |     | NULL    |                |
| arrival_time   | time    | YES  |     | NULL    |                |
| departure_time | time    | YES  |     | NULL    |                |
+----------------+---------+------+-----+---------+----------------+
5 rows in set (0.00 sec)

サンプル値は次のとおりです。

mysql> select * from route_timings;
+----+--------------+-------------+--------------+----------------+
| ID | route_number | stop_number | arrival_time | departure_time |
+----+--------------+-------------+--------------+----------------+
|  1 |           54 |           1 | 10:00:00     | 10:05:00       |
|  2 |           54 |           2 | 11:00:00     | 11:05:00       |
|  3 |           54 |           3 | 12:00:00     | 12:05:00       |
|  4 |           55 |           3 | 13:00:00     | 13:05:00       |
|  5 |           55 |           4 | 14:00:00     | 14:05:00       |
|  6 |           55 |           5 | 15:00:00     | 15:05:00       |
|  7 |           60 |           3 | 10:00:00     | 10:05:00       |
|  8 |           60 |           2 | 11:00:00     | 11:05:00       |
|  9 |           60 |           1 | 12:00:00     | 12:05:00       |
+----+--------------+-------------+--------------+----------------+
9 rows in set (0.01 sec)

私の質問は次のとおりです。stop_number 1 と stop_number 3 を含む route_number をリストしたい場合は、次のようなクエリを記述します。

SELECT DISTINCT `route_number` FROM `route_timings` WHERE `route_number` IN (
    SELECT `route_number` FROM `route_timings` WHERE `stop_number`=1
) AND `route_number` IN (
    SELECT `route_number` FROM `route_timings` WHERE `stop_number`=3
);

ただし、上記のクエリでは、2 つのストップを含む route_numbers のみが返され、ソース ストップ (1) が目的地ストップ (3) の前に到着するルートは返されません。

クエリは次を返します。

+--------------+
| route_number |
+--------------+
|           54 |
|           60 |
+--------------+

route_number 60 は 1 から開始して 3 に移動するのではなく、3 から開始して 1 に移動します。誰かがそのビットをクエリに追加して、stop_number 1 のarrival_time が少ない route_numbers のみをクエリが出力するようにしてください。 stop_number 3 のarrival_timeよりも遅くなります。

前もって感謝します。-シャイン

4

3 に答える 3

1
SELECT DISTINCT `route_number` R1 FROM R1.`route_timings` WHERE R1.`stop_number` =3 AND R1.`route_number` IN (
SELECT `route_number` R2 FROM `route_timings` WHERE R2.`stop_number`=1 AND R2.`arrival_time` > R1.`arrival_time`
);

今は試すことができませんが、構文が正しいことを願っています。私がやったことは、3を通過するルートを選択し、後でそれらが1で停止するかどうかを確認しました。私は通常、SELECT route_numberR2で行ったように、結合クエリのテーブルの名前を変更できるSQLiteを使用しています。

于 2012-03-13T09:13:09.973 に答える
1

次のようなものはどうですか:

select fromStop.RouteNumber  
from routeTimings fromStop  
  inner join routeTimings toStop on toStop.RouteNumber = fromStop.RouteNumber and toStop.StopNumber = 3 and toStop.ArrivalTime > fromStop.DepartureTime  
where fromStop.StopNumber = 1

これは、私が慣れ親しんでいる規則に合わせて調整されたSQLサーバーの構文と名前を使用していることに注意してください。ただし、原則は明確でなければなりません

于 2012-03-13T09:25:16.673 に答える
0

使用する :

SELECT DISTINCT `route_number` FROM `route_timings` WHERE `stop_number` IN (1,3)

注: 出発時刻が到着時刻よりも大きいのはなぜですか??

于 2012-03-13T09:09:13.480 に答える