2017-10-22 82 views
0

我有一個關於棒球隊及其球員的各種記錄的數據庫。我需要寫一個查詢,顯示任何連續三年爲teamID「MON」玩過的玩家的姓名。我已經寫了一個查詢給我下面的表格,顯示他們爲這支球隊效力的年數。SQL查詢選擇記錄間連續3年

| nameFirst | nameLast |年份|
+ ----------- + --------- + ------- +
| Santo | Alcala | 1977 |
| Santo | Alcala | 1978 |
| Santo | Alcala | 1979 |
|斯科特| Aldred | 1993 |

我懶得在表格中輸入更多的記錄,但這應該是充分了解情況。我的數據庫中的實際表格有數千條記錄。因此,我需要的查詢將會爲Santo Alcala返回一個記錄,因爲他連續三年爲MON球隊效力。上表只顯示玩過MON的玩家,我已經寫過一個查詢,排除所有爲MON以外的球隊效力的玩家。

查詢的期望的輸出將是一個記錄,例如:

| nameFirst | nameLast |
+ -------------- + --------- +
| Santo | Alcala |

如果一名球員連續三年在球隊中效力超過3年,他們也會顯示在結果中。

+0

的[尋找具有在列的值連續增加行數](可能的複製https://stackoverflow.com/questions/10354506/finding- rows-with-consecutive-increase-in-the-values-of-a-column) – 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 FIDDLE http://sqlfiddle.com/#!9/b5c1c4/1