MySQL-按分组并选择最大值

时间:2019-03-16 12:31:18

标签: mysql sql

我有下表:

reservas_tanatosalas enter image description here

我有以下查询:

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。

4 个答案:

答案 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