Left Join with same table and group by 返回具有相反顺序的重复元组

Left Join with same table and group by is returning duplicated tuples with reverse order

我正在尝试查询包含以下列的数据库(不属于我):

NumEpoca (epoch), Turma(class), Dia (day - indicates day of the week), 
Hora (hour - each value indicates a 30mins time, a 3h class generate 6 tuples), 
Disciplina (course), TipoAula (type of class, theoretical or practical),     
Sala (classroom)

这基本上是一个 class 时间表,所以对于给定的 Class,在一周的同一天,我可以在一周内有一个实用的 class,在另一周内理论上的 class.

现在,我想获取给定日期的最小和最大小时数(这样我就可以计算 class 的开始和结束时间),但我还想获取 class他们的房间,我先验地不知道,如果这将是理论或实践 class。

另外,有些class只是实用的,有些只是理论的,所以我只想要1个class房间。

我正在做的查询基本上给了我所有的东西,但是

LectureDetails(beginDate=2020-05-26 15:30:00, endDate=2020-05-26 18:30:00, classroom=L_H1/G.0.08)
LectureDetails(beginDate=2020-05-26 15:30:00, endDate=2020-05-26 18:30:00, classroom=G.0.08/L_H1)

正如你在这里看到的,我得到相同的 class(在同一时间开始和结束,对于 2 个 class 房间 Teo 和 Pract。但我只需要 1 个元组那天我得到 L_H1/G.0.08 和 G.0.08/L_H1.

"SELECT a1.Dia,MIN(a1.Hora),MAX(a1.Hora),a1.Sala, a2.Sala FROM Aulas as a1 LEFT JOIN Aulas as a2 " +
                    "on a1.Sala <> a2.Sala and a1.Disciplina = a2.Disciplina and a1.NumEpoca = a2.NumEpoca and a1.Turma = a2.Turma " +
                    "and a1.Dia= a2.Dia and a1.Hora = a2.Hora " +
                    "where NumEpoca = ? AND Turma = ? AND Disciplina=?  GROUP BY a1.Dia,a1.Sala,a2.Sala"

提前致谢。

您可以使用 a1.Sala < a2.Sala 而不是不等式来消除排序错误的结果。

但这并不是您真正想要的方法。尝试这样的事情:

SELECT Dia, MIN(Hora), MAX(Hora),
    MIN(Sala),
    CASE WHEN MIN(Sala) = MAX(Sala) THEN NULL ELSE MAX(Sala) END
FROM Aulas
WHERE NumEpoca = ? AND Turma = ? AND Disciplina = ?
GROUP BY Dia