Newsgroup: it.comp.software.database
Titolo: [?] Possibile creare una query che faccia ........

Prima di tutto, un salve a tutti quanti.
Espongo il mio problema.
Ho un DB (che novità, altrimenti che ci facevi qui?)..
In ogni caso:
2 tabelle
tabMix e tabTratte.
Campi (solo quelli che servono per il mio caso)
tabMix.IDMix
tabMix.IDAereo
ecc......
tabTratte.IDTratta
tabTratte.IDMix
tabTratte.ETD  (ossia Estimated Time of Departure)
tabTratte.ICAOPart (Codice dell'aeroporto di partenza)
tabTratte.ICAODest (Codice Aeroporto di destinazione)
tabTratte.ETA (ossia Estimated Time of Arrival).
Ora la Mix (missione) è un insieme di voli che viene effettuato da un
determinato aereo ed equipaggio.
le tratte naturalmente sono contenute nella tabTratte con relazione 1 a
molti (1 in tabMix, molti in tabTratte).
Problema 1:
Quando inserisco una nuova missione o tratta, voglio verificare se va in
conflitto con altre missioni o tratte già inserite.
Quindi dato un orario di inizo e fine volo per tale aereo.... voglio
controllare se esiste una missione che è impegna per quel periodo l'aereo od
un membro dell'equipaggio. Non voglio però controllare le singole tratte, ma
le missioni. Il motivo è che potrei avere un aereo che parte, atterra a
NewYork, sta 4 giorni fermo e poi torna indietro.
Io voglio impedire che in quei 4 giorni l'aereo venga usato per volare da
Milano a genva e Ritorno, quindi se faccio un controllo solo sulle tratte...
non mi accorgo dell'errore.
In pratica sto provando a creare una stringa SQL che mi restituisca per ogni
missione l'ETD più basso e l'ETA più alto tra quelli delle tratte associate.
Ho provato con la seguente query, ma .... non funge, mi elenca tutte le
tratte, io invece vorrei elencato un record per ogni missione, non tutte le
tratte e missioni (ripetute quando tratte diverse appartengono alla stessa
missione).
SELECT tabMix.IDMix, tabMix.IDVeli, tabTratte.ATD, Min(tabTratte.ETD) AS
MinDiETD, tabTratte.ICAOPart, tabTratte.ICAODest, Max(tabTratte.ETA) AS
MaxDiETA, tabTratte.ATA
FROM tabMix INNER JOIN tabTratte ON tabMix.IDMix = tabTratte.IDMix
GROUP BY tabMix.IDMix, tabMix.IDVeli, tabTratte.ATD, tabTratte.ICAOPart,
tabTratte.ICAODest, tabTratte.ATA
HAVING (((Min(tabTratte.ETD))>=#4/8/2004 10:30:00# And
(Min(tabTratte.ETD))<#4/8/2004 23:55:00#)) OR
(((Max(tabTratte.ETA))>=#4/8/2004 10:30:00# And
(Max(tabTratte.ETA))<#4/8/2004 23:55:00#))
ORDER BY tabMix.IDMix;
Ripeto, non fate conto alla mancanza della clausa di esclusione su
tabMix.IDVeli, quella la so implementare naturalmente.
Problema 2
Devo rappresentare su un tabellone tutti i voli e li devo ordinare per
Missione.
Ora nel tabellone naturalmente devo scrivere tutti i voli della stessa
missione e voglio che le missioni siano ordinate in funzione del primo
decollo del giorno.
Quindi se ho un missione con ID=1S e tratte ID=4T e 0T con decolli alle ore
10:50 e 20:30 ed una Mix con ID=2S e tratte ID=1T ed 2T con decolli alle
09:00 e 21:00
Vorrei ottenere una tabella di risultati in cui le ID siano raggruppate, ma
il cui ordine non derivi dall'ID di misssione, ma dall'ETD più basso.
Query da me creata e non funzionante:
SELECT tabMix.IDMix, tabTratte.IDTratta, tabTratte.ETD
FROM tabMix INNER JOIN tabTratte ON tabMix.IDMix = tabTratte.IDMix
WHERE (((tabTratte.ETD)>=#04/08/2004# And (tabTratte.ETD)<#04/09/2004#))
ORDER BY tabTratte.ETD;
ora con questa query avrei (usando gli esempi su riportati)
2S    1T    09:00
1S    4T    10:50
1S    0T    20:30
2S    2T    21:00
Se ordino per tabMix.IDMix, tabTratte.ETD allora  ottengo:
1S    4T    10:50
1S    0T    20:30
2S    1T    09:00
2S    2T    21:00
Ora io invece cerco la seguente tabella quale risultante della query:
2S    1T    09:00
2S    2T    21:00
1S    4T    10:50
1S    0T    20:30
Come devo modificare le Query?
Grazie a tutti per l'aiuto.
BTW in realtà da codice ho già creato, testato ed in funzione il controllo
di cui sopra, ma per farlo carico tutte le missioni e le tratte che partono
da 30 giorni prima fino al momentodell'atterraggio, solo che .......... è
dipsendioso ed inutile se riesco a trovare una  query che mi diadirettamnte
come risultato un record nel caso esista un conflitto.


:Provate a guardare gli ingredienti del famoso Labello che si usa per
:le labbra screpolate: Butirrospermum Parkii (sperma di maiale).

 la query si complica:
ed infatti è quello che mi serve



usa MSDE per la quale c'é un interfaccia liberamente scaricabile da
Internet. oppure co continui ad usare access come interfaccia con
tabelle collegate via odbc
non conosco bene access, ma dovrebbe funzionare

 ha scritto nel messaggio
news:c5guec$1hukd$1...@ID-65620.news.uni-berlin.de...


 cambia il risultato.
l'interfaccia grafica è sempre access
il motore db cambia da jet a sqlserver
la query cambia eccome, con sqlserver difficile che non ci sia soluzione
(non sono entrato però nella logica delle query di leonardo)