SQL查询在记录之间连续选择3年

时间:2017-10-22 00:25:57

标签: mysql

我有一个数据库,里面有关于棒球队及其球员的各种记录。我需要编写一个查询,显示为teamID" MON"播放的任何玩家的名字。连续三年。我已经写了一个查询,告诉我下面的表格,显示他们为该团队效力的岁月。

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

我懒得在表格中输入更多记录,但这应该足以了解情况。我的数据库中的实际表有数千条记录。所以我需要的查询将返回Santo Alcala的一条记录,因为他连续三年为MON队效力。上表仅显示了为MON效力的球员,我已经写了一个查询,排除了为MON以外的球队效力的所有球员。

查询的所需输出将是一条记录,例如:

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

如果球员在球队中连续超过3年,他们也会出现在结果中。

1 个答案:

答案 0 :(得分:1)

您正在寻找类似下面的内容吗?

<强>模式

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

<强>插入

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

<强>输出

FIRST   LAST
Santo   Alcala
Santo   Aldred

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