我无法得到正确的结果。我有4张桌子:
table: Aluno
id_aluno nome
1 Bruno
2 Carlos
table: Serie
id_serie id_aluno descricao
1 1 Tipo A
2 1 Tipo B
3 2 Tipo A
table: Treino
id_treino id_serie data
1 1 2015-12-10
2 2 2015-12-12
3 3 2015-12-10
table: Avaliacao
id_avaliacao id_aluno data_avaliacao
1 1 2015-12-07
2 1 2015-12-01
3 2 2015-12-05
4 2 2015-12-04
我想要以下结果:
nome descricao data data_avaliacao
Bruno TIPO B 2015-12-12 2015-12-07
Carlos TIPO A 2015-12-10 2015-12-05
问题是GROUP BY子句应该有“id_aluno”列,但它不是具有日期的表的外键。他们之间有一个中间表(系列)。 我还有另一张桌子(avaliacao),我也想要最大日期,但是当我加入它们时,我得到了aluno的多个结果。
我试过查询:
SELECT a.nome, s.descricao, t.data, aa.data_avaliacao FROM Aluno a JOIN Serie s ON s.id_aluno = a.id_aluno JOIN Treino t ON t.id_serie = s.id_serie JOIN Avaliacao aa ON aa.id_aluno = a.id_aluno WHERE t.data = SELECT MAX(t1.data) FROM Aluno a1 JOIN Serie s1 ON s1.id_aluno = a1.id_aluno JOIN Treino t1 ON t1.id_serie = s1.id_serie WHERE s1.id_aluno = s.id_aluno )
答案 0 :(得分:0)
如果我给你这个,你能解决另一部分吗?
SELECT a.nome
, s.descricao
, t.data
, v.data_avaliacao
FROM aluno a
JOIN serie s
ON s.id_aluno = a.id_aluno
JOIN treino t
ON t.id_serie = s.id_serie
JOIN
( SELECT s.id_aluno
, MAX(t.data) max_data
FROM serie s
JOIN treino t
ON t.id_serie = s.id_serie
GROUP
BY id_aluno
) x
ON x.id_aluno = s.id_aluno
AND x.max_data = t.data
JOIN avaliacao v
ON v.id_aluno = a.id_aluno;
答案 1 :(得分:0)
使用您自己的查询检查最后一部分,仅按
添加组SELECT a.nome, s.descricao, t.data, aa.data_avaliacao FROM Aluno a
JOIN Serie s ON s.id_aluno = a.id_aluno
JOIN Treino t ON t.id_serie = s.id_serie
JOIN Avaliacao aa ON aa.id_aluno = a.id_aluno
WHERE t.data =
(SELECT MAX(t1.data)
FROM Aluno a1
JOIN Serie s1 ON s1.id_aluno = a1.id_aluno
JOIN Treino t1 ON t1.id_serie = s1.id_serie
WHERE s1.id_aluno = s.id_aluno ) group by a.nome
你可以在sqlfiddle
中测试一下答案 2 :(得分:0)
我认为davejal的代码只有在数据中才有效,表格treino的MAX日期对应于每个aluno的表格avaliacao的MAX日期,当不是这样的结果将不会是预期。使用
的想法草莓
,最后将是
SELECT a.nome
, s.descricao
, t.data
, v.data_avaliacao
FROM aluno a
JOIN serie s
ON s.id_aluno = a.id_aluno
JOIN treino t
ON t.id_serie = s.id_serie
JOIN
( SELECT s.id_aluno
, MAX(t.data) max_data
FROM serie s
JOIN treino t
ON t.id_serie = s.id_serie
GROUP
BY id_aluno
) x
ON x.id_aluno = s.id_aluno
AND x.max_data = t.data
JOIN avaliacao v
ON s.id_aluno = v.id_aluno
WHERE v.data_avaliacao IN
( SELECT MAX(v.data_avaliacao) max_data1
FROM avaliacao v
GROUP
BY id_aluno
)
,希望这个帮助