2017-03-01 178 views
1

我有以下查询:SQL-DateAdded功能和求和问题

SELECT 
    p.name as Name, SUM(r.attempts) as Attempts, SUM(r.gains) as Positive,  
    SUM(r.losses) as Negative, SUM(r.yards) as Net, SUM(r.touchdowns) as TD, 
    SUM(r.longest) as Long, year(g.date_) as Season 
FROM 
    Rush AS r 
INNER JOIN     
    PlayerGame AS pg ON r.playerGame_Id = pg.playerGame_Id 
INNER JOIN 
    Players AS p ON p.player_Id = pg.player_Id 
INNER JOIN 
    Games as g ON g.game_Id = pg.game_Id 
WHERE 
    g.date_ LIKE CASE 
        WHEN month(g.date_) = 1 
         THEN DATEADD(year, -1, g.date_) 
        ELSE g.date_ 
       END 
GROUP BY 
    year(date_), name 
ORDER BY 
    Season DESC, Attempts DESC, Positive, Negative, Net, TD, Long 

我试图得到每个赛季的所有统计数据的总和。我试图在一个赛季中添加一月份的所有额外比赛。当我运行这个查询时,季节与一月份的日期是分开的。然而,对于1月份的所有比赛,它并不会将它们加到所有尝试,场地等的总和上。如果有人能够提供帮助,或者需要额外的环境,请告诉我。由于

+0

你的意思是说,你的赛季开始非常热门,结束于1月? – scaisEdge

+0

是的,基本上 – MattInTheHat

+0

您需要重复您拥有的'CASE'逻辑。然而,从长远来看,我会有一个季节表,我将在我的回答中概述 –

回答

1

你应该每年使用与中减去每月 这对MySQL

SELECT p.name as Name, SUM(r.attempts) as Attempts, SUM(r.gains) as Positive,  
SUM(r.losses) as Negative, SUM(r.yards) as Net, SUM(r.touchdowns) as TD, 
SUM(r.longest) as Long, year(DATE_SUB(date_,INTERVAL 1 MONTH)) as Season 
FROM Rush AS r INNER JOIN     
PlayerGame AS pg ON r.playerGame_Id = pg.playerGame_Id 
INNER JOIN Players AS p ON p.player_Id = pg.player_Id 
INNER JOIN Games as g ON g.game_Id = pg.game_Id 

Group by year(DATE_SUB(date_,INTERVAL 1 MONTH)), name 
Order by Season DESC, Attempts DESC, Positive, Negative, Net, TD, Long 

这对于SQL服务器

SELECT p.name as Name, SUM(r.attempts) as Attempts, SUM(r.gains) as Positive,  
SUM(r.losses) as Negative, SUM(r.yards) as Net, SUM(r.touchdowns) as TD, 
SUM(r.longest) as Long, year(DATEADD(month, -1, date_)) as Season 
FROM Rush AS r INNER JOIN     
PlayerGame AS pg ON r.playerGame_Id = pg.playerGame_Id 
INNER JOIN Players AS p ON p.player_Id = pg.player_Id 
INNER JOIN Games as g ON g.game_Id = pg.game_Id 

Group by year(DATEADD(month, -1, date_)), name 
Order by Season DESC, Attempts DESC, Positive, Negative, Net, TD, Long 
+0

它告诉我DATE_SUB不是内置函数 – MattInTheHat

+0

你正在使用哪个db? – scaisEdge

+0

更新为sqlserver的答案 – scaisEdge

0

与列SeasonSeasonStartSeasonEnd创建一个表Seasons

SELECT p.name as Name, SUM(r.attempts) as Attempts, SUM(r.gains) as Positive,  
SUM(r.losses) as Negative, SUM(r.yards) as Net, SUM(r.touchdowns) as TD, 
SUM(r.longest) as Long, s.Season as Season 
FROM Rush AS r INNER JOIN     
PlayerGame AS pg ON r.playerGame_Id = pg.playerGame_Id 
INNER JOIN Players AS p ON p.player_Id = pg.player_Id 
INNER JOIN Games as g ON g.game_Id = pg.game_Id 
INNER JOIN Seasons AS s on g.date_ BETWEEN s.SeasonStart AND s.SeasonEnd 
Group by s.Season, name 
Order by s.Season DESC, Attempts DESC, Positive, Negative, Net, TD, Long 

那么就需要特殊的日子逻辑消失,并且由表来表示。