选择每组一列的最高值

时间:2017-10-28 17:38:09

标签: mysql group-by inner-join

我想显示porcentaje列的值,但只显示id最高的记录(每item):

SELECT tb_avance.item, tb_avance.id, tb_proceso.porcentaje
    FROM tb_avance_detalle
    INNER JOIN tb_avance on tb_avance_detalle.id_avance=tb_avance.id
    INNER JOIN tb_proceso ON tb_proceso.id_avance_detalle=tb_avance_detalle.id
    INNER JOIN tb_mapa ON tb_mapa.id = tb_avance_detalle.id_mapa
    WHERE tb_mapa.manzana=107 AND tb_mapa.lote=12

输出:

item                       id     porcentaje
--------------------------------------------
EXCAVACION DE FUNDACION    90     100
EXCAVACION DE FUNDACION    91     50
HORMIGON FUNDACIONES       92     90
HORMIGON FUNDACIONES       93     40

我想只显示标记的记录:

item                       id     porcentaje
--------------------------------------------
EXCAVACION DE FUNDACION    90     100
EXCAVACION DE FUNDACION    91     50 <------
HORMIGON FUNDACIONES       92     90
HORMIGON FUNDACIONES       93     40 <------
像这样

item                       id     porcentaje
--------------------------------------------
EXCAVACION DE FUNDACION    91     50
HORMIGON FUNDACIONES       93     40

1 个答案:

答案 0 :(得分:0)

您应按项目分组,然后您可以使用group_concat子句order by,然后从中提取第一个值:

SELECT     tb_avance.item, 
           max(tb_avance.id) as id,
           cast(group_concat(tb_proceso.porcentaje order by id desc) as unsigned) 
              as porcentaje
FROM       tb_avance_detalle
INNER JOIN tb_avance on tb_avance_detalle.id_avance = tb_avance.id
INNER JOIN tb_proceso ON tb_proceso.id_avance_detalle = tb_avance_detalle.id
INNER JOIN tb_mapa ON tb_mapa.id = tb_avance_detalle.id_mapa
WHERE      tb_mapa.manzana = 107 
       AND tb_mapa.lote = 12
GROUP BY   tb_avance.item