¿Cómo mostrar solo dos registros con id diferentes?

publicado por: Anonymous

Tengo la siguiente tabla1:

nombre                       |   tipo     |   fecha      | id
-------------------------------------------------------------------
RETEN_2016_10_02_01a.txt     |    .txt    |  2016-10-02  | RETEN    
RETEN_2016_10_02_02b.txt     |    .txt    |  2016-10-02  | RETEN
RETEN_2016_10_02_03c.txt     |    .txt    |  2016-10-02  | RETEN   
STOP_2016_10_02_01a.txt      |    .txt    |  2016-10-02  | STOP         
STOP_2016_10_02_02b.txt      |    .txt    |  2016-10-02  | STOP         
STOP_2016_10_02_03c.txt      |    .txt    |  2016-10-02  | STOP         

Tengo el siquiente query:

SELECT * FROM tabla1 WHERE fecha = '2016-10-02' and id in ('RETEN','STOP')

Que lo que hace es que me muestra todos los registros de esa fecha con esos id asi como lo muestro en la tabla1.

Pero como puedo lograr que solo me muestre dos registros con esos dos id así como a continuación lo muestro:

nombre                       |   tipo     |   fecha      | id
-------------------------------------------------------------------
RETEN_2016_10_02_01a.txt     |    .txt    |  2016-10-02  | RETEN     
STOP_2016_10_02_01a.txt      |    .txt    |  2016-10-02  | STOP    

solución

Entiendo que lo que quieres hacer es sacar la primera ocurrencia de cada grupo de id (la primera con el id RETEN y la primera con id STOP).

Creando el esquema de tu tabla de la siguiente manera:

CREATE TABLE tabla1 (
nombre VARCHAR(30) PRIMARY KEY,
tipo VARCHAR(10) NOT NULL,
fecha DATE,
id VARCHAR(10)
);

INSERT INTO tabla1 VALUES("RETEN_2016_10_02_01a.txt", ".txt", '2016-10-02', "RETEN");
INSERT INTO tabla1 VALUES("RETEN_2016_10_02_02b.txt", ".txt", '2016-10-02', "RETEN");
INSERT INTO tabla1 VALUES("RETEN_2016_10_02_03c.txt", ".txt", '2016-10-02', "RETEN");
INSERT INTO tabla1 VALUES("STOP_2016_10_02_01a.txt", ".txt", '2016-10-02', "STOP");
INSERT INTO tabla1 VALUES("STOP_2016_10_02_02b.txt", ".txt", '2016-10-02', "STOP");
INSERT INTO tabla1 VALUES("STOP_2016_10_02_03c.txt", ".txt", '2016-10-02', "STOP");

Puedes usar la sentencia GROUP BY al final de tu consulta sobre la columna id, lo cual te devolverá la primera fila de cada uno de los grupos. La consulta sería así:

SELECT * FROM tabla1 WHERE fecha = '2016-10-02' and id in ('RETEN','STOP') GROUP BY id

Y te devolverá la siguiente salida:

introducir la descripción de la imagen aquí

Si quieres ver la demo la puedes ver aquí.

Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *