es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Si hay 2 o más registros, mantenga la prima más alta.

He visto consultas que utilizan max(value) con group by para seleccionar el valor más alto donde el ID está duplicado (), sin embargo, creo que no estoy aplicando el enfoque correctamente y esperaba que alguien pudiera ayudar.

Necesito hacer una declaración select into, ya que haré referencia a esta tabla en un momento posterior. Teniendo eso en cuenta, mi código se ve así:

select class, record_id, max(salesprice) as salesprice, category, zone
into ##weeklysalestable
from ##salestable
where class in ('residential')
group by class, record id, category, zone
order by record id, class, category,zone

El problema es que SQL me solicita nombrar la columna 3 (así que agregué eso al código anterior) lo cual creo que está causando que la salida no elimine el duplicado con el menor salesprice. El objetivo es simplemente mantener el record_id con el precio de venta más alto.

¿No se puede aplicar max() en este escenario? Si es así, ¿hay algún enfoque alternativo?

Datos de origen de muestra:

class record_id salesprice category zone
A1 AR2695 13 NEW NE
A1 AR2695 26 NEW NE
B2 AL5397 18 USL SE
C3 AM3920 39 NEW SW

Salida deseada:

record_id class salesprice category zone
AR2695 A1 26 NEW NE
AL5397 B2 18 USL SE
AM3920 C3 39 NEW SW

Cualquier consejo sería genial.

Tags:  ,

Answer

  1. Avatar for davy.ai

    Parece que la consulta está utilizando max() correctamente para seleccionar el precio de venta más alto para cada grupo de registros con la misma clase, record_id, categoría y zona. Sin embargo, el problema puede ser el orden de las columnas en la cláusula GROUP BY.

    En los datos de muestra proporcionados, la columna record_id no debe incluirse en la cláusula GROUP BY porque quieres mantener el registro con el precio de venta más alto independientemente del record_id. La cláusula GROUP BY solo debe incluir las columnas de clase, categoría y zona.

    Aquí está la consulta actualizada:

    SELECT class, max(salesprice) as salesprice, category, zone
    INTO ##weeklysalestable
    FROM ##salestable
    WHERE class = 'residencial'
    GROUP BY class, category, zone -- Nota que record_id no se incluye en la cláusula GROUP BY
    ORDER BY record_id, class, category, zone
    

    Esto debería darte el resultado deseado con solo los registros con el precio de venta más alto para cada combinación de clase, categoría y zona.

Comments are closed.