2017-10-22 6 views
0

私は、野球チームとその選手に関するあらゆる種類のレコードが満載のデータベースを持っています。私はチームID "MON"を3年連続してプレイしたプレイヤーの名前を表示するクエリを書く必要があります。私はすでに下のテーブルを与えて、彼らがそのチームでプレーした年を示すクエリを書いています。レコード間を3年連続で選択するSQLクエリ

| nameFirst | nameLast |年|
+ ----------- + --------- + ------- +
|サント|アルカラ| 1977年|
|サント|アルカラ| 1978年|
|サント|アルカラ| 1979年|
|スコット|アルドレッド| 1993 |

私はテーブルにそれ以上のレコードを入力するにはあまりにも怠惰ですが、これは状況を十分に理解する必要があります。私のDBの実際のテーブルには何千ものレコードがあります。だから私が必要とする質問は、彼がMONチームのために3年連続していたので、Santo Alcalaのための1つの記録を返すでしょう。上の表は、MONのためにプレイしたプレイヤーのみを示しています。私はすでに、MON以外のチームでプレイしたすべてのプレイヤーを除外したクエリを書いています。

クエリの出力は、次のようなレコードになります。

| nameFirst | nameLast |
+ -------------- + --------- +
|サント|アルカラ|

チームで3年連続してプレイしたプレイヤーは、結果にも表示されます。

+0

[列の値の連続増加を持つ行を検索]の可能な重複(https://stackoverflow.com/questions/10354506/finding-列の値が連続的に増加する行) – Minisha

+0

これらは類似の質問ですが、私の質問が提示するシナリオよりも少し複雑です。 – cheesebal35

答えて

0

あなたは以下のようなものをお探しですか?

スキーマ

CREATE TABLE PLAYER (
ID INT, 
FIRST VARCHAR(25), 
LAST VARCHAR(25), 
YEAR INT 
); 

INSERTS

INSERT INTO PLAYER (ID, FIRST, LAST, YEAR) VALUES (1, "Santo", "Alcala", 1977); 
INSERT INTO PLAYER (ID, FIRST, LAST, YEAR) VALUES (2, "Santo", "Alcala", 1978); 
INSERT INTO PLAYER (ID, FIRST, LAST, YEAR) VALUES (3, "Santo", "Alcala", 1979); 
INSERT INTO PLAYER (ID, FIRST, LAST, YEAR) VALUES (4, "Santo", "Alcala", 1980); 
INSERT INTO PLAYER (ID, FIRST, LAST, YEAR) VALUES (5, "Santo", "Aldred", 1993); 
INSERT INTO PLAYER (ID, FIRST, LAST, YEAR) VALUES (6, "Santo", "Aldred", 1994); 
INSERT INTO PLAYER (ID, FIRST, LAST, YEAR) VALUES (7, "Santo", "Royal", 1994); 

クエリ

select DISTINCT(FIRST), LAST from player where ID 
IN (select p1.ID from player p1 inner join player p2 
    on p1.year = p2.year+1 and p1.first = p2.first and p2.last = p1.last); 

OUTPUT

FIRST LAST 
Santo Alcala 
Santo Aldred 

SQLフィドル

http://sqlfiddle.com/#!9/b5c1c4/1
関連する問題