Newsgroup: it.comp.software.database
Titolo: Un aiutino su 3 query SQL

Buon giorno, mi trovo in difficoltà con un esercizio di sql standard,
vi chiederei se potreste per favore darmi una mano
Grazie in anticipo
Si hanno le seguenti tabelle:
Tabella ANAGRAFE, le cui colonne sono:
COD_ASSISTITO varchar (10)
COGNOME varchar (20)
NOME varchar (20)
DATA_REGISTRAZIONE date
DATA_NASCITA date
SESSO char (1)
COMUNE_RESIDENZA varchar (20)
INDIRIZZO text
Tabella RICOVERI, le cui colonne sono:
COD_ASSISTITO varchar (10)
COD_RICOVERO varchar (10)
DATA_RICOVERO date
REPARTO_RICOVERO varchar (20)
DATA_DIMISSIONE date
REPARTO_DIMISSIONE varchar(20)
Si ha inoltre a disposizione una funzione julian() applicabile al tipo
di dato date che restituisce la data in formato giuliano (un intero).
L'esercizio chiede:
1)	Scrivere una query SQL che restituisce la lista dei ricoveri,
ordinata per data di ricovero e poi per cognome e nome dell'assistito
effettuati nel giugno del 2003, riportando oltre ai campi suddetti
anche il codice dell'assistito e il reparto in cui è stato ricoverato.
2)	Scrivere una query SQL che restituisca codice assistito, cognome,
data di ricovero e totale giorni di ricovero di ciascun assistito
ricoverati nell'anno 2002
3)	Scrivere una query SQL che restituisca la lista degli assistiti
ricoverati nell'anno 2002 comprendente codice, cognome e nome, la cui
durata complessiva di ricovero ha superato i 7 giorni
Svolgimento domanda 1:
SELECT DATA.RICOVERO, COGNOME, NOME, COD_ASSISTITO, REPARTO_RICOVERO
FROM ANAGRAFE NATURAL JOIN RICOVERI
WHERE DATA_RICOVERO BETWEEN "1/6/2003" AND "30/6/2003"
ORDER BY DATA_RICOVERO, COGNOME, NOME
E' corretta? Mi sembra troppo semplice per essere così, non ho usato
la funzione julian né alcuna funzione di raggruppamento.
Svolgimento domanda 2:
SELECT COD_ASSISTITO, COGNOME, DATA_RICOVERO, SUM (JULIAN
(DATA_DIMISSIONE) – JULIAN (DATA_RICOVERO))
FROM ANAGRAFE JOIN RICOVERI USING COD_ASSISTITO
GROUP BY COD_ASSISTITO, COGNOME, DATA_RICOVERO, DATA_DIMISSIONE
HAVING DATA_RICOVERO BETWEEN "1/1/2002" AND "31/12/2002"
Questa domanda mi ha messo in difficoltà in quanto prima di tutto non
ho capito bene se intende i giorni di ricovero totali in tutto l'anno
o i giorni di ricovero DI OGNI RICOVERO. Ho ipotizzato che intendesse
i giorni di ricovero in tutto l'anno, visto che dice "totale giorni di
ricovero" e mi son trovato in difficoltà in quanto nell'elenco di
selezione ho contemporaneamente una funzione di colonna SUM (JULIAN
(DATA_DIMISSIONE) – JULIAN (DATA_RICOVERO)) e DATA_RICOVERO che invece
è diversa da ricovero e ricovero. Ho cercato di rendere lecito il
tutto raggruppando anche per DATA_RICOVERO e DATA_DIMISSIONE ma non so
se la query è lecita e se restituisce il risultato richiesto. Se
potreste illuminarmi ve ne sarei molto grato.
Svolgimento domanda n. 3:
SELECT COD_ASSISTITO, COGNOME, NOME
FROM ANAGRAFE NATURAL JOIN RICOVERI
WHERE DATA_RICOVERO BETWEEN "1/1/2002" AND "31/12/2002"
GROUP BY COD_ASSISTITO, COGNOME, NOME
HAVING SUM (JULIAN (DATA_DIMISSIONE)-JULIAN (DATA_RICOVERO)) > 7
Questa sembra un po' più semplice ma non sono convinto ugualmente
della sua correttezza. Anche qui tra l'altro ho ipotizzato che la
domanda 3 richiedesse che i 7 giorni da superare si riferissero al
totale giorni di ricovero in tutto l'anno e non al singolo ricovero.
Grazie mille per la pazienza e per un eventuale chiarimento.

 ricovero"
Secondo me ti sei complicato la vita.
Credo che il problema chieda i giorni di OGNI ricovero,
visto che nell'output della query deve esserci la data del ricovero.
Quale sarebbe altrimenti l'output per qualcuno ricoverato piu' di una volta?
saluti
N! Xau