【问题标题】:SQL query to select 3 consecutive years between recordsSQL查询在记录之间选择连续3年
【发布时间】:2017-10-22 00:25:57
【问题描述】:

我有一个数据库,其中包含有关棒球队及其球员的各种记录。我需要编写一个查询,显示连续三年为 teamID“MON”效力的任何球员的姓名。我已经编写了一个查询,它提供了下表,显示了他们为那支球队效力的年限。

|姓名第一 |姓名姓氏|年份 |
+-----------+---------+--------+
|桑托 |阿尔卡拉 | 1977 |
|桑托 |阿尔卡拉 | 1978 |
|桑托 |阿尔卡拉 | 1979 |
|斯科特 |奥尔德雷德 | 1993 |

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

查询的期望输出将是一条记录,例如:

|姓名第一 |姓名姓氏|
+--------------+---------+
|桑托 |阿尔卡拉 |

如果一名球员在球队连续效力超过 3 年,他们也会显示在结果中。

【问题讨论】:

标签: mysql


【解决方案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

【讨论】:

  • 它也连续 2 年返回该值,这不应该。连续3年是什么条件?
  • @ojuskulkarni 您需要在子查询中添加另一个AND 子句,条件为p1.year = p2.year+2
猜你喜欢
  • 2018-02-07
  • 2015-02-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多