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.

¿Cómo eliminar filas o filtrar filas con algunos valores de columnas idénticas utilizando algunos criterios?

Tengo una tabla que filtro y ordeno con esta consulta:

select * from XXXX where Segment='Gewerbe' and Division='Strom' and consumption >= 1000 and consumption < 2000 and rank<= 5 and market_id='39a2e05fd43300c998558ef56bca18e2' order by consumption, rank

El conjunto de resultados contiene básicamente tres grupos de resultados que están agrupados por MARKET_ID y RANK. Cada subresultado difiere por RANK (1..N).

La parte difícil: solo me interesan los subresultados con el RANK más alto. En este caso, necesito cada fila con RANK=5. Por lo tanto, quiero eliminar las filas con RANK=1..4. Tenga en cuenta que el RANK más alto para cada subresultado puede ser menor que 5.

Tabla de resultados: https://i.stack.imgur.com/wvuW0.png

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para eliminar las filas con RANK=1..4 y mantener solo los subresultados con la más alta RANK, se puede utilizar una subconsulta para filtrar las filas no deseadas.

    SELECT *
    FROM XXXX 
    WHERE Segment='Gewerbe' 
        AND Division='Strom' 
        AND consumption >= 1000 
        AND consumption < 2000 
        AND rank = 5 
        AND market_id='39a2e05fd43300c998558ef56bca18e2' 
        AND (market_id, rank) IN (
            SELECT market_id, MAX(rank) AS max_rank
            FROM XXXX
            WHERE Segment='Gewerbe' 
                AND Division='Strom' 
                AND consumption >= 1000 
                AND consumption < 2000 
                AND rank <= 5
                AND market_id='39a2e05fd43300c998558ef56bca18e2'
            GROUP BY market_id
        )
    ORDER BY consumption, rank
    

    La subconsulta selecciona la máxima RANK para cada market_id y la consulta externa filtra todas las filas excepto aquellas con rank = 5 para el market_id seleccionado. El operador IN se utiliza para que coincidan tanto el market_id como los valores de rank con el conjunto de resultados de la subconsulta.

    Tenga en cuenta que si existen empates para la máxima RANK dentro de un grupo de market_id, esta consulta devolverá todas las filas correspondientes.

Comments are closed.