SQL-DateAdded 函数和 Sum 问题
SQL-DateAdded Function and Sum issue
我有以下查询:
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 月份进行的所有比赛,它不会将它们添加到所有尝试、码数等的总和中。如果有人可以提供帮助或者如果您需要额外的背景信息,请告诉我。谢谢
您应该使用减去月份的年份
这是 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
创建一个包含 Season
、SeasonStart
和 SeasonEnd
.
列的 table 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
那么对特殊日期逻辑的需求就消失了,由 table 表示。
我有以下查询:
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 月份进行的所有比赛,它不会将它们添加到所有尝试、码数等的总和中。如果有人可以提供帮助或者如果您需要额外的背景信息,请告诉我。谢谢
您应该使用减去月份的年份 这是 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
创建一个包含 Season
、SeasonStart
和 SeasonEnd
.
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
那么对特殊日期逻辑的需求就消失了,由 table 表示。