2017-10-22 2 views
0

Ich habe eine Datenbank voller aller Arten von Aufzeichnungen über Baseball-Teams und ihre Spieler. Ich muss eine Abfrage schreiben, die die Namen von Spielern zeigt, die drei aufeinander folgende Jahre für die TeamID "MON" gespielt haben. Ich habe bereits eine Abfrage geschrieben, die mir die Tabelle unten zeigt, die die Jahre zeigt, die sie für dieses Team gespielt haben.SQL-Abfrage zu 3 aufeinanderfolgenden Jahren zwischen den Datensätzen

| NameFirst | NameLast | Jahr |
+ ----------- + --------- + ------- +
| Santo Alcala | 1977 |
| Santo Alcala | 1978 |
| Santo Alcala | 1979 |
| Scott | Aldred | 1993 |

Ich bin zu faul, um weitere Datensätze in der Tabelle einzugeben, aber dies sollte ausreichen, um die Situation zu verstehen. Die aktuelle Tabelle in meiner Datenbank enthält Tausende von Datensätzen. Also würde die Frage, die ich brauche, einen Rekord für Santo Alcala zurückgeben, da er drei aufeinander folgende Jahre für das MON-Team gespielt hat. Die obige Tabelle zeigt nur Spieler, die für MON gespielt haben. Ich habe bereits eine Abfrage geschrieben, die alle Spieler ausschließt, die für andere Teams als MON gespielt haben.

Die gewünschte Ausgabe der Abfrage wie sein ein Rekord wäre:

| NameFirst | NameLast |
+ -------------- + --------- +
| Santo Alcala |

Wenn ein Spieler mehr als 3 aufeinanderfolgende Jahre in der Mannschaft gespielt hat, würde er auch in den Ergebnissen angezeigt werden.

+0

Mögliches Duplikat [Finding Reihen mit fortlaufender Erhöhung des Wert einer Spalte] (https://stackoverflow.com/questions/10354506/finding- Zeilen-mit-Konsekutiv-Erhöhung-in-den-Werten einer Spalte) – Minisha

+0

Sie sind ähnliche Fragen, aber das scheint ein bisschen komplizierter, dass das Szenario meine Frage darstellt. – cheesebal35

Antwort

0

Suchen Sie etwas wie das Folgende?

Schema

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

EINSÄTZEN

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); 

Abfrage

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); 

Ausgang

FIRST LAST 
Santo Alcala 
Santo Aldred 

SQL FIDDLE http://sqlfiddle.com/#!9/b5c1c4/1

Verwandte Themen