【发布时间】:2018-07-04 19:18:07
【问题描述】:
我正在尝试获取具有match 最大日期的season.id。
查询是这样的:
SELECT s.id AS season_id,
s.name AS season_name,
s.competition_id AS competition_id
FROM competition_seasons s
INNER JOIN competition_rounds r ON r.season_id = s.id
INNER JOIN `match` m ON m.round_id = r.id
WHERE s.competition_id = 89
AND m.datetime = (SELECT MAX(m.datetime) FROM `match` m WHERE m.round_id = r.id)
GROUP BY s.id
如您所见,我有一个名为 competition_seasons 的表,其中包含可用于比赛的所有赛季,在此表上我获得了比赛的所有信息,在这种情况下,比赛的 ID 为 89。
后来我通过competition_rounds 表获得了比赛赛季可用的所有rounds,match 在round 上播放,所以我在match 表上使用INNER JOIN,因为我需要仅获取具有matches 的rounds。
比赛89有不同的赛季不同的回合,例如:
- 2017/2018
- 2016/2017
- 2015/2016
查询应该返回2017/2018,因为是最后一个赛季有match和MAX(m.datetime)这个字段表示比赛的开始时间,一个match在这个赛季进行的2017/2018意味着有一个可以从 2017 年开始到 2018 年结束的日期(因此在赛季的两年内)。
查询的结果反而是2011,完全没有意义。
我在查询中做错了什么?
competition_seasons
| id | name | competition_id
1 2017/2018 89
2 2016/2017 89
3 2015/2016 89
competition_rounds
| id | name | season_id
1 First 1
2 Second 1
3 First 2
4 Second 2
5 First 3
匹配
|id | datetime | round_id
1 2018-03-08 00:00:0 1
2 2017-09-10 20:30:0 1
3 2017-04-18 15:30:0 3
4 2016-03-08 00:00:0 3
5 2015-04-08 00:00:0 4
6 2015-05-08 00:00:0 5
预期结果:season_id = 1,因为本赛季的 match 的字段 datetime 比前几个赛季大。
【问题讨论】:
-
您能提供一些示例数据并期待结果吗?
-
请提供一些数据和预期结果。另外,“季节”是什么类型(例如
2017/2018)? -
@D-Shih 请检查我的更新,我添加了描述数据类型和情况的示例数据