【问题标题】:Select the highest value of one column per group选择每组一列的最大值
【发布时间】:2017-10-28 17:38:08
【问题描述】:

我想显示 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

【问题讨论】:

标签: mysql group-by inner-join


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2021-10-11
    • 2011-05-29
    • 2014-08-24
    • 2022-11-13
    • 1970-01-01
    • 2020-05-16
    • 2018-08-25
    • 2014-12-01
    • 2016-11-01
    相关资源
    最近更新 更多