Seconda versione query

di il
5 risposte

Seconda versione query

Ciao a tutti,
Ho questa query da scrivere:

Ricavare il primo artista morto dopo 'Prince' (il risultato deve contenere il nome dell’artista, la sua data di nascita e la sua data di morte) (scrivere due versioni della query).

Vi spiego in breve com'è realizzato il database, tanto per questa query basta una sola tabella:
In pratica ho la tabella con tutti gli artisti e attributi vari, tra cui appunto le date di nascita e di morte.
Io ho scritto una prima versione della query e ho verificato la correttezza. Il problema è che non riesco in nessun modo a trovare una seconda versione, cosa non semplice secondo me dato che si risolve con una sola tabella (quindi senza join ecc)
Vi posto la mia soluzione e vi chiedo se per favore sapete darmi qualche consiglio per scriverne una seconda versione (anche solo eventuali passaggi, poi ci penso io)

PRIMA SOLUZIONE:
select artist.name, make_date(artist.begin_date_year, artist.begin_date_month, artist.begin_date_day) nascita,
make_date(artist.end_date_year, artist.end_date_month, artist.end_date_day) morte
from artist
where make_date(artist.end_date_year, artist.end_date_month, artist.end_date_day) =
	(select min(make_date(artist.end_date_year, artist.end_date_month, artist.end_date_day))
	from artist
	where make_date(artist.end_date_year, artist.end_date_month, artist.end_date_day) > 
		(select make_date(artist.end_date_year, artist.end_date_month, artist.end_date_day)
		from artist
		where artist.name = 'Louis Armstrong'));

5 Risposte

  • Re: Seconda versione query

    Io non tanto me la cavo a leggere le query in SQL. Preferisco ragionare con la logica passo passo. Talvolta, se la query ti "appare" più complessa del previsto, prova a fare più query semplici. Se poi ti riesce di capirne la logica, unisci il tutto in una query sola. Venendo alla tua questione:
    1. Fai una query dove filtri "Prince" con sue DataNascita a DataMorte. Questa query avrà un solo record. Chiamerai questa query Prince.
    2. Fai una seconda query in cui importi la query Prince e la tabella Artisti. In questa query trascini i campi che ti servono prelevati da Artisti. Quindi metti il filtro >DataMorte (prelevato da Prince) e Ordinamento Crescente sul campo DataMorte. Il primo valore di questa query sarà ciò che ti interessa.

    Ho fatto un ragionamento molto terra terra. Ovviamente puoi ottimizzare e migliorare il tutto a tuo piacimento.
  • Re: Seconda versione query

    Giuso ha scritto:


    Ricavare il primo artista morto dopo 'Prince' (il risultato deve contenere il nome dell’artista, la sua data di nascita e la sua data di morte) (scrivere due versioni della query).
    ...
    Vi posto la mia soluzione e vi chiedo se per favore sapete darmi qualche consiglio per scriverne una seconda versione
    Sembra un esercizio "scolastico". Invece di Min() sulla data (calcolata) puoi usare TOP 1 avendo l'accortezza mettere in ordine crescente la data di morte.
  • Re: Seconda versione query

    Grazie a entrambi, però mi sono dimenticato di dirvi una cosa importante. Non posso utilizzare quelle funzioni come ad esempio TOP o LIMIT, perchè appunto come ha detto Phil è un esercizio scolastico. Comunque ora ne ho riscritta un altra facendo un passaggio diverso, spero possa andar bene. Grazie lo stesso.
  • Re: Seconda versione query

    Giuso ha scritto:


    Non posso utilizzare quelle funzioni come ad esempio TOP o LIMIT, perchè appunto come ha detto Phil è un esercizio scolastico..
    Perché gli esercizi scolastici non ammettono l'uso di TOP?
    Più che altro vorrei portare la tua attenzione sul punto 8, lettera e) del Regolamento... occhio!
  • Re: Seconda versione query

    Mi viene esplicitamente richiesto di non usarlo, e non mi pare che sto andando incontro a qualche regola di esami e quant'altro. Sto chiedendo un aiuto su un esercizio in preparazione, che problema c'è? comunque ho risolto da solo.
Devi accedere o registrarti per scrivere nel forum
5 risposte