|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Member
Iscritto dal: Aug 2010
Messaggi: 138
|
[SQL] - Sottrazione
Non ricordo come sottrarre 2 numeri o meglio 2 orari in SQL.
Ho il seguente schema relazionale: • Evento (Data, Città, Nome) • Musicista (Nome, Età, Città) • Partecipazione (Musicista, Evento, OraInizio, OraFine, Ruolo, CompensoOrario) E devo formulare la seguente interrogazione in SQL: 4) Per ogni musicista, il numero di partecipazioni di durata maggiore di 3 ore (NB: per durata di una partecipazione, si intende la differenza tra l’orario di fine e l’orario di inizio); Quindi ho fatto questo: Select P.musicista , count(*) From Partecipazione P where ( P.oraFine - P.oraInizio > 3 ore ) Group by P.musicista il mio problema sta nel sottrarre : oraFine - oraInizio , qualcuno sa aiutarmi? Grazie ![]() ![]() ![]() ![]() ![]() |
![]() |
![]() |
![]() |
#2 |
Member
Iscritto dal: Aug 2010
Messaggi: 138
|
Help
Ragazzi ho un maledetto bisogno del vostro aiuto...
![]() ho l'esame a breve ....... |
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Apr 2002
Città: Nosgoth
Messaggi: 16888
|
Stesso mio problema
potresti usare (DATEDIFF (hh, P.oraFine, P.oraInizio))>3 ma a me poi non funziona il confronto con un integer (>,< etc) Non capisco il perchè dato che la funzione ritorna un integer. Vedi se magari ti va o se da l'errore scrivi come hai corretto perchè il debug di libreoffice è abbastanza criptico sugli errori ![]() Ultima modifica di Redvex : 01-03-2011 alle 11:20. |
![]() |
![]() |
![]() |
#4 |
Member
Iscritto dal: Aug 2010
Messaggi: 138
|
ma io sto usando Sql , non mySql , "DateDiff " va bene anche per Sql??
Comunque mi da errore.... sto leggendo un libro intero ma non da un cazz di chiarimento per confrontare due orari .... Grazie comunque ![]() |
![]() |
![]() |
![]() |
#5 | |
Senior Member
Iscritto dal: Apr 2002
Città: Nosgoth
Messaggi: 16888
|
Quote:
A me ritorna i giorni giusti. |
|
![]() |
![]() |
![]() |
#6 |
Senior Member
Iscritto dal: Jul 2008
Messaggi: 485
|
Nel caso di Gin&&Tonic datediff non dovrebbe andare bene perchè restituisce la differenza delle componenti data, mentre a te interessa la differenza di orario.
Dovresti quindi usare timediff() che ritorna il tipo time. Utilizzando, poi, la funzione hour() estrai come intero le ore di differenza e puoi finalmente verificare se è maggiore o uguale a 3 Ultima modifica di Dânêl : 01-03-2011 alle 11:43. |
![]() |
![]() |
![]() |
#7 | |
Senior Member
Iscritto dal: Apr 2002
Città: Nosgoth
Messaggi: 16888
|
Quote:
|
|
![]() |
![]() |
![]() |
#8 |
Senior Member
Iscritto dal: Jul 2008
Messaggi: 485
|
Non ho qui installato un server mysql per fare delle prove.
Prova a postare la query completa ed eventualmente l'errore che ti viene restituito. Magari il problema sta altrove |
![]() |
![]() |
![]() |
#9 |
Member
Iscritto dal: Aug 2010
Messaggi: 138
|
Danel scusa ma non ho capito come dovrei fare : allora io ho questo schema relazionale:
• Evento (Data, Città, Nome) • Musicista (Nome, Età, Città) • Partecipazione (Musicista, Evento, OraInizio, OraFine, Ruolo, CompensoOrario) E devo formulare la seguente interrogazione in SQL: -Per ogni musicista, il numero di partecipazioni di durata maggiore di 3 ore (NB: per durata di una partecipazione, si intende la differenza tra l’orario di fine e l’orario di inizio); Ho cosi formulato l'interrogazione: Select P.musicista , count(*) From Partecipazione P where ( P.oraFine - P.oraInizio > 3 ore ) Group by P.musicista cosa dovrei mettere al posto di " P.oraFine - P.oraInizio > 3 ore" ? non ho capito come applicare quei "metodi"... Grazie |
![]() |
![]() |
![]() |
#10 |
Senior Member
Iscritto dal: Jul 2008
Messaggi: 485
|
Codice:
Select P.musicista , count(*) From Partecipazione P where HOUR ( TIMEDIFF(P.oraFine,P.oraInizio) ) >= 3 Group by P.musicista |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 03:15.