SQL - consulta sql

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

consulta sql

Publicado por fernando (6 intervenciones) el 09/06/2017 19:15:55
Hola, comunidad!.Tengo estas dos tablas:

table Viaje (

IdTerminalOrigenViaje decimal not null foreign key references Terminal (IdTerminal),

IdTerminalDestinoViaje decimal not null foreign key references Terminal (IdTerminal),

FechaHoraViaje datetime,

Importe float,

IdTren decimal foreign key references Tren (IdTren),

IdViaje decimal not null Primary Key

);





create table Tren (

IdTren decimal not null Primary Key,

TipoTren varchar(60),

CapacidadTren integer,

MarcaTren varchar(80)

);



Y se me pide esta consulta:

Listar todos los datos de los trenes con más de 200 asientos que no tengan asignado ningún viaje que parta el
día de mañana.



Lo que hice fue esta consulta:

select Tren.TipoTren, Tren.MarcaTren from Tren where tren.IdTren not in (select Viaje.IdTren from Viaje) and CapacidadTren >200;

Lo que no se como verificar que no tenga viajes para el día de mañana, les agradezco mucho.
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 Manuel
Val: 67
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

consulta sql

Publicado por Manuel (29 intervenciones) el 09/06/2017 20:13:04
Realmente casi lo tienes, vas por el camino correcto. Solo te falta modificar la subconsulta para que filtre y solo ofrezca los trenes del día de mañana.

Aunque ese datatime puede ser problemático y yo lo convertiría a uno de fechacorta con algo así: CONVERT(datetime, DATEDIFF(d, 0, FechaHoraViaje), 102)

Después, en la subconsuta lo que necesitas y sacar la fecha de mañana (cada día cambia), para ello yo usaría 2 funciones de SQL Server (en otros SGBD tienes que ver que hay disponible),concretamente:

-getdate() que devuelve la fecha del día actual

-dateadd() que te devuelve una fecha futura según la cantidad que tu le digas, puedes darle una cantidad de días y te devolverá que fecha coincide, o meses, horas, años

Con lo que la fecha de mañana se sacaría de esta forma (revisa que lo estoy haciendo de memoria):
dateadd(day,1,getdate())
pero claro es en formato datatime, tienes que convertirlo en fecha corta.


Que dentro de la subconsulta sería alto por el estilo:
select Viaje.IdTren from Viaje where CONVERT(datetime, DATEDIFF(d, 0, FechaHoraViaje), 102) as diaviaje =dateadd(day,1,CONVERT(datetime, DATEDIFF(d, 0, getdate()), 102))

Así tienes los trenes que circulan mañana... y el resto es como tu ya pusiste.

hasta luego, espero que te sirva

PD: por qué fecha corta? porque a ti te interesa mañana todo el día, desde la media noche del día actual a la medianoche del día siguiente... y luego debes sacar la hora y el minuto de la operación, sino solo buscarías los que pasan a una hora y minuto concreto. Que es lo que complica al final, sino sería mucho más sencillo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
3
Comentar
sin imagen de perfil
Val: 14
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

consulta sql

Publicado por fernando (6 intervenciones) el 09/06/2017 20:26:22
Quedó corriendo bien, 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
1
Comentar