1

train_operators:

| train_operator_id |  name  |  
------------------------------
| 1                 | Virgin |
| 2                 |  First |

旅:

| journey_id | train_operator | train_type |
--------------------------------------------
| 1          | 2              | 2          |
| 2          | 2              | 1          |
| 3          | 1              | 3          |
| 4          | 1              | 2          |

列車の種類:

| train_type_id | date_made  |
------------------------------
| 1             | 1999-02-15 |
| 2             | 2001-03-11 |
| 3             | 2000-12-05 |

2 番目に古いタイプの列車を使用するすべての列車運行会社を検索するクエリを作成するには、どうすればよいでしょうか?

指定されたスキーマでは、2 番目に古いトレイン タイプを使用する唯一のトレイン オペレータであるため、クエリの結果は Virgin だけになるはずです。

4

3 に答える 3

2

pgのウィンドウ関数の力を使用すると非常に簡単になります

SELECT DISTINCT train_operator_id, 
                name 
FROM   (SELECT t.train_operator_id, 
               t.name, 
               Rank() OVER (ORDER BY tt.date_made) AS rank 
        FROM   train_operators AS t 
               JOIN journeys AS j 
                 ON j.train_operator = t.train_operator_id 
               JOIN train_types AS tt 
                 ON tt.train_type_id = j.train_type) AS q 
WHERE  rank = 2; 

http://sqlfiddle.com/#!12/98816/8

于 2013-03-12T11:11:36.123 に答える
2

これを試して:

select distinct train_operator from journeys 
    inner join (Select * from train_types order by date_made LIMIT 1 OFFSET 1) sectrain 
    on sectrain.train_type_id = journeys.train_type

あなたは UK Rail Network に興味がありますか? 以前は Funkwerk IT で働いていました。Funkwerk IT は、Network Rail の時刻表計画ソフトウェアを提供していました...

于 2013-03-12T10:59:05.850 に答える
1
select to.name
from
    train_operators to
    inner join
    journeys j on to.train_operator_id = j.train_operator
where
    j.train_type = (
        select train_type_id
        from train_types
        order by date_made
        limit 1 offset 1
    )
于 2013-03-12T11:48:23.707 に答える