Foro de elhacker.net

Programación => Bases de Datos => Mensaje iniciado por: sebapoli00 en 20 Noviembre 2019, 00:25 am



Título: duda sql
Publicado por: sebapoli00 en 20 Noviembre 2019, 00:25 am
buenas, tengo que hacer una consulta que implica saber si una persona asistio a varios eventos, mostrar la fecha de el ultimo evento al que asistio y sino asistio a ninguno poner que no asistio

asi lo venia haciendo hasta el momento

Código
  1. SELECT DISTINCT p.*, CASE
  2. WHEN --busco si asistio a eventos THEN --subconsulta ultima fecha del evento al que asistio
  3. ELSE 'No Asistió'
  4. END AS Asistencia
  5. FROM persona p, evento e, asistio a;
  6.  

el asunto es que luego de buscar si asistio, no logro poner la ultima fecha del evento al que asistio

intente a través de una subconsulta que la devuelva, pero no lo he logrado

el resto del codigo funciona correctamente porque si en vez de la subconsulta le pongo x cosa por ejemplo 'asistio' me compila y la salida me la devuelve correctamente

como puedo hacer funcionar esto? alguna sugerencia?



Título: Re: duda sql
Publicado por: Carloswaldo en 20 Noviembre 2019, 00:53 am
No me parece que sea necesario hacer una subconsulta. Yo haría algo así:

Código
  1. SELECT p.nombre, CASE
  2. WHEN MAX(e.fecha) IS NOT NULL THEN
  3. MAX(e.fecha)::text
  4. ELSE
  5. 'No Asistió'
  6. END
  7. FROM persona p
  8. LEFT JOIN asistio a ON a.id_persona = p.id_persona
  9. JOIN evento e ON e.id_evento = a.id_evento
  10. GROUP BY p.nombre

No dices en qué motor estás trabajando, esto lo hice en PostgreSQL pero asumo que puedes hacer algo parecido en otros motores. Además no sé cuál es la estructura de las tablas pero estoy asumiendo que es una relación muchos a muchos entre persona y evento que se rompe con la tabla asistio.


Título: Re: duda sql
Publicado por: sebapoli00 en 20 Noviembre 2019, 11:49 am
Estoy trabajando en sql developer y la tabla evento y persona se relacionan con la relacion asistio que va de 0 a n

No estoy en mi casa como para probar ese código pero en viento pueda te digo!

me lanza el mismo error que tenia antes:

ORA-00932: tipos de dato inconsistentes: se esperaba DATE se ha obtenido CHAR
00932. 00000 -  "inconsistent datatypes: expected %s got %s"
*Cause:   
*Action:
Error en la línea: 232, columna: 2

MOD: No hacer doble post. Usa el boton modificar.


Título: Re: duda sql
Publicado por: Carloswaldo en 20 Noviembre 2019, 14:31 pm
El problema es que en una misma columna de resultado intentas retornar datos de tipos diferentes (DATE en el caso de que hayan asistido, y VARCHAR si no han asistido), así que tienes que incluir un casting para que funcione. En mi ejemplo el "::text" era el casting, como ya veo que estás en Oracle, tendrás que hacer el casting así:

Código
  1. CAST(MAX(e.fecha) AS VARCHAR(50))

Cuéntanos cómo te fue.


Título: Re: duda sql
Publicado por: sebapoli00 en 20 Noviembre 2019, 20:10 pm
Si! Ya lo solucione de esa manera, muchisimas gracias por la ayuda!