我有下表:
我有以下查询:
SELECT r.cod_reserva, MAX(r.hora_fin_utc) FROM reservas_tanatosalas r GROUP BY r.cod_tanatosala
结果:显示正确的最大值但错误的cod_reserva
。为什么?
cod_reserva MAX(r.hora_fin_utc)
7 9999999999
6 9999999999
我想得到什么?
cod_reserva MAX(r.hora_fin_utc)
7 9999999999
8 9999999999
cod_reserva将来可能会更改为varchar,因此我无法在其上使用max。
答案 0 :(得分:1)
请勿为此使用GROUP BY
。您的查询格式错误,无法在最新版本的MySQL(具有默认设置)或几乎任何数据库中运行。
select r.*
from r
where r.hora_fin_utc = (select max(r2.hora_fin_utc)
from reservas_tanatosalas r2
where r2.cod_tanatosala = r.cod_tanatosala
);
将问题视为过滤问题,而不是聚集问题。您要过滤数据,以便结果集中仅显示最新行。
如果性能是一个问题,那么您需要在(cod_tanatosala, hora_fin_utc)
上建立索引。
这是您的查询:
这是查询:
SELECT r.cod_reserva, MAX(r.cod_tanatosala) FROM reservas_tanatosalas r
GROUP BY r.cod_tanatosala
HAVING MAX(r.hora_fin_utc)
这是说:
cod_tanatosala
的每个值产生一行cod_tanatosala
的最大值cod_reserva
。它不是聚合函数或GROUP BY
中的参数。 HAVING
仅表示MAX(r.hora_fin_utc)
既不是0
也不是NULL
。不太有用。
答案 1 :(得分:0)
您正在使用另一列对结果集进行分组,而select语句引用了另一列。以下内容绝对可以正常工作,如果不行,请通知我:
SELECT
r.cod_reserva, MAX(r.hora_fin_utc)
FROM
reservas_tanatosalas r
GROUP BY
r.cod_reserva
HAVING
MAX(r.hora_fin_utc)
答案 2 :(得分:0)
我运行了与您相同的查询,
SELECT MAX(r.cod_reserva), MAX(r.hora_fin_utc) FROM reservas_tanatosalas r GROUP BY r.cod_tanatosala
但是我也在r.cod_reserva上使用了聚合函数MAX(),因为没有错误,它会给出错误“这与sql_mode = only_full_group_by不兼容”,并且我可以使用MAX(r.cod_reserva)对其进行测试。
答案 3 :(得分:0)
首先,在大多数数据库(包括新版本的Mysql)中,由于您按不属于select的列进行分组,因此该代码将发出错误。以下查询将为您显示所显示的数据集的结果
inotify