我有一项任务,我遇到一个问题。基本上我有一张下面的表格。亚历克斯是一名球员,桌上展示了他每个赛季都参加过的球队。请注意,季节从特定年份开始,到次年结束。我只需要使用SQL(没有游标)来产生输出,如第二张表中所示,Alex的职业生涯只显示在两行中,而第一张表中Alex的职业生涯则以四行显示。
我几乎没有尝试解决这个问题,但无法理解如何在第二个表中生成输出。我可以感觉到我必须使用CTE,因为我可以看到Year_End等于下一行的Year_Start。我也曾试图在网上进行研究,但由于这是一个非常具体的问题,我找不到任何相关的解决方案。到目前为止,我还发布了我的查询,因为我认为我走在正确的轨道上,但现在我已经卡住了。
**TABLE records**
Id | Name | Team_Name | Year_Start | Year_End
---------------------------------------------------
100 | Alex | New Team | 2010 | 2011
101 | Alex | New Team | 2011 | 2012
102 | Alex | Best Eleven | 2012 | 2013
103 | Alex | Best Eleven | 2013 | 2014
**Required result from query**
Name | Team Name | Year_Start | Year_End
-------------------------------------------
Alex | New Team | 2010 | 2012
Alex | Best Eleven | 2012 | 2014
我的查询到目前为止......
WITH RECURSIVE cte(id, name, team_name, year_start, year_end) AS
(
SELECT *
FROM history
WHERE name = 'Alex'
UNION ALL
SELECT history.id, history.name, history.team_name, history.year_start, history.year_end
FROM cte, history
WHERE cte.year_start = history.year_end
)
SELECT *
FROM cte;
产生请求结果的查询。
WITH RECURSIVE cte(id, name, team_name, year_start, year_end) AS
(
SELECT *
FROM history
WHERE name = 'Alex'
UNION ALL
SELECT history.id, history.name, history.team_name, history.year_start, history.year_end
FROM cte, history
WHERE cte.year_start = history.year_end
)
SELECT team_name, MIN(year_start), MAX(year_end)
FROM cte
GROUP BY team_name;
答案 0 :(得分:0)
您可以使用以下查询来获得所需的结果
Select Distinct t.Name,t.Team_Name,b.YStart,b.YEnd
FROM t INNER JOIN(
Select Team_Name, Min(Year_Start) YStart,Max(Year_End) YEnd
FROM t
Group BY Team_Name ) b
ON t.Team_Name = b.Team_Name
答案 1 :(得分:-1)
select Name, Team_Name, min(Year_Start) startY, max(Year_End) endY
from t group by Name, Team_Name