SQL - consulta sql ¿necesario cursores?

 
Vista:
sin imagen de perfil
Val: 16
Ha disminuido su posición en 3 puestos en SQL (en relación al último mes)
Gráfica de SQL

consulta sql ¿necesario cursores?

Publicado por juan (8 intervenciones) el 31/07/2018 19:07:12
Hola quisiera saber como extraer la fila completa de la linea que cumpla esta condición
Código
SELECT MIN(linea) FROM tabla WHERE tipo ='b' GROUP BY (id)
es decir,
la fila que contenga la linea mas pequeña que sea del tipo 'b' de cada id
¿alguien que pueda echarme una mano?
¿Son necesarios cursores?
la base de datos es postgresql
tabla
----------------------------------
id tipo linea nombre
----------------------------------
1 a 2 juan

2 b 1 pepe

2 b 4 pepito

3 b 1 pepote

3 b 2 pepiño
resultado debería ser:
id tipo linea nombre
2 b 1 pepe
3 b 1 pepote
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Isaias
Val: 2.542
Oro
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

consulta sql ¿necesario cursores?

Publicado por Isaias (1921 intervenciones) el 31/07/2018 19:54:41
¿Y donde dejas 1 a 2 juan?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 16
Ha disminuido su posición en 3 puestos en SQL (en relación al último mes)
Gráfica de SQL

consulta sql ¿necesario cursores?

Publicado por juan (8 intervenciones) el 31/07/2018 20:13:58
tienen que cumplir la condición de tipo = 'b' también
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 806
Bronce
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

consulta sql ¿necesario cursores?

Publicado por Leonardo Josué (1173 intervenciones) el 31/07/2018 20:36:59
Hola Juan:

Esta es una de las consultas que básicas que debes saber en SQL... tienes muchas formas de obtener el resultado esperado, pero la mejor, desde mi punto de vista es con subconsultas:

No tengo PostgreSQL instalado en mi equipo, pero este ejemplo usa sólo SQL Estándar, así es que debería de funcionar tal como lo hace en MySQL:

1
2
3
4
5
6
7
8
9
10
mysql> SELECT * FROM tabla;
+------+------+-------+--------+
| id   | tipo | linea | nombre |
+------+------+-------+--------+
|    1 | a    |     2 | juan   |
|    2 | b    |     1 | pepe   |
|    2 | b    |     4 | pepito |
|    3 | b    |     1 | pepote |
+------+------+-------+--------+
4 rows in set (0.00 sec)

Primero obtienes el valor que te interesa (MIN) para cada id:

1
2
3
4
5
6
7
8
9
10
11
mysql> SELECT id, MIN(linea) min_linea
    -> FROM tabla
    -> where tipo  = 'b'
    -> GROUP BY id;
+------+-----------+
| id   | min_linea |
+------+-----------+
|    2 |         1 |
|    3 |         1 |
+------+-----------+
2 rows in set (0.00 sec)
Después, utilizas esto como una SUBCONSULTA para filtrar la información que necesitas, es decir, el registro completo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
mysql> SELECT T1.*
    -> FROM tabla T1
    -> INNER JOIN
    -> ( SELECT id, MIN(linea) min_linea
    ->   FROM tabla
    ->   where tipo  = 'b'
    ->   GROUP BY id) T2 on T2.id = T1.id and T2.min_linea = T1.linea;
+------+------+-------+--------+
| id   | tipo | linea | nombre |
+------+------+-------+--------+
|    2 | b    |     1 | pepe   |
|    3 | b    |     1 | pepote |
+------+------+-------+--------+
2 rows in set (0.00 sec)

Haz la prueba y nos comentas:

Saludos
Leo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar
sin imagen de perfil
Val: 16
Ha disminuido su posición en 3 puestos en SQL (en relación al último mes)
Gráfica de SQL

consulta sql ¿necesario cursores?

Publicado por juan (8 intervenciones) el 31/07/2018 20:54:44
Hola Leo
En primer lugar gracias por tu respuesta.
De acuerdo, pero hay algo que no entiendo o no se hacer ¿Como puedo crear las tablas para hacer un inner join?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 806
Bronce
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

consulta sql ¿necesario cursores?

Publicado por Leonardo Josué (1173 intervenciones) el 31/07/2018 23:38:42
Hola de nuevo Juan:

1
2
De acuerdo, pero hay algo que no entiendo o no se hacer ¿Como puedo crear las tablas para hacer
un inner join?

¿A qué te refieres con crear tablas para hacer un inner join? la consulta que puse de ejemplo no crea ninguna tabla, simplemente hace dos consultas sobre la misma tabla de datos... Si te refieres a T1 y T2, son simplemente ALIAS que utilizo para poder usar ambas consultas a la vez.

Saludos
Leo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 16
Ha disminuido su posición en 3 puestos en SQL (en relación al último mes)
Gráfica de SQL

consulta sql ¿necesario cursores?

Publicado por juan (8 intervenciones) el 01/08/2018 01:34:48
Funciona perfectamente muchas gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar