Torna in homepage www.vincenzomanzoni.com
Homepage personale e blog di Vincenzo Manzoni
 
 FAQFAQ   CercaCerca   Cerca con GoogleCerca con Google   Lista utentiLista utenti   GruppiGruppi   RegistratiRegistrati   Feed AtomFeed
 ProfiloProfilo   Messaggi privatiMessaggi privati   Log inLog in 

Dubbi SQL
Vai a 1, 2  Successivo
 
Questo forum è chiuso: Non puoi inserire, rispondere o modificare gli argomenti.   Quest'argomento è chiuso: Non puoi inserire, rispondere o modificare i messaggi.    Indice del forum -> L'angolo di Leonardo Da Vincienzomanzoni.com
Precedente :: Successivo  
Autore Messaggio
Ghisa
Utente adulto
Utente adulto


Registrato: 06/02/04 20:29
Messaggi: 2588
Residenza: San Pellegrino Terme

MessaggioInviato: Mar Ago 08, 2006 12:29 pm    Oggetto: Dubbi SQL Rispondi citando

E' tutta mattina che mi sto scervellando per fare una query, ma non ci arrivo proprio come fare a farla... vi spiego...

Ho 4 tabelle legate fra loro con delle join, la tabella principale è la preventivi con idpreventivo e nrrevisione come chiave primaria.


Id preventivo non è univoco, e revisione è incrementale... io vorrei, con una query, estrarre tutti i dati delle 4 tabelle che hanno legami con la preventivi, selezionando dalla preventivi solo un record per ogni idpreventivo prendendo il massimo da nrrevisione...

es

id rev altrimillemilacampi
1 1 *
1 2 *
2 1 *
2 2 *
2 3 *
3 1 *

Risultato:
id rev altrimillemilacampi
1 2 *
2 3 *
3 1 *

Capito dalla mia contortissima spiegazione cosa mi servirebbe?

Qualcuno può aiutarmi? Sad
_________________
Principio di Indeterminazione di Heineken: Non potrai mai essere sicuro del numero di birre che hai bevuto la notte scorsa.



LucaGhisalberti.com
Top
Profilo Invia messaggio privato HomePage MSN
bubu
Utente adolescente
Utente adolescente


Registrato: 24/03/06 20:57
Messaggi: 529
Residenza: Serina

MessaggioInviato: Mar Ago 08, 2006 2:48 pm    Oggetto: Rispondi citando

prova con questa query:

SELECT p1.id AS ID, MAX(P1.REV) AS REV
FROM prev AS P1 INNER JOIN prev AS P2 ON P1.id=P2.id
GROUP BY P1.id;

id stà per idpreventivo e rev per nrrevisione...
spero di aver risolto il tuo problema Embarassed
buon lavoro
ciao
_________________
I say find someone you can love like crazy and who'll love you the same way back. And how do you find him? Forget your head and listen to your heart. I'm not hearing any heart. Run the risk, if you get hurt, you'll come back. Because, the truth is there, the truth is there is no sense living your life without this.

MyBlog
Top
Profilo Invia messaggio privato Invia e-mail HomePage MSN
Ghisa
Utente adulto
Utente adulto


Registrato: 06/02/04 20:29
Messaggi: 2588
Residenza: San Pellegrino Terme

MessaggioInviato: Mar Ago 08, 2006 3:12 pm    Oggetto: Rispondi citando

bubu ha scritto:
prova con questa query:

SELECT p1.id AS ID, MAX(P1.REV) AS REV
FROM prev AS P1 INNER JOIN prev AS P2 ON P1.id=P2.id
GROUP BY P1.id;

id stà per idpreventivo e rev per nrrevisione...
spero di aver risolto il tuo problema Embarassed
buon lavoro
ciao

Grazie mille per l'aiuto, ma da lo stesso risultato di questa che avevo fatto sta mattina... Sad

SELECT DISTINCT Preventivi.idpreventivo, MAX(NrRevisione)
FROM Preventivi
GROUP BY IDPreventivo

Il problema sorge quando devo estrarre anche altri campi...
esempio:

Ammettiamo di dover estrarre anche il campo "Data" (dove naturalmente è memorizzata la data) che ha un valore diverso fra il record con lo stesso idpreventivo, ma con diverso NrRevisione...
Aggiungendo la data nei campi da selezionare devo metterla anche nella group by, in questo modo mi divide considera i record come record distinti e non mi estrae solo quello con NrRevisione più alto... Sad

Stessa cosa fa provando ad aggungerlo nella query che mi hai suggerito... Crying or Very sad

Dovrei fare la group by solo con IDPreventivo e non con tutti gli altri campi, ma SQLServer si incazza se non li metto tutti nella clausola di GROUP BY

Grazie mille per l'aiuto comunque! Wink
_________________
Principio di Indeterminazione di Heineken: Non potrai mai essere sicuro del numero di birre che hai bevuto la notte scorsa.



LucaGhisalberti.com
Top
Profilo Invia messaggio privato HomePage MSN
bubu
Utente adolescente
Utente adolescente


Registrato: 24/03/06 20:57
Messaggi: 529
Residenza: Serina

MessaggioInviato: Mar Ago 08, 2006 3:30 pm    Oggetto: Rispondi citando

Hai provato a fare una query annidata?
del tipo:

SELECT P1.id AS ID, P1.rev AS REV, P1.data
FROM prev AS P1
WHERE p1.rev IN ( SELECT MAX(P0.REV) AS REV
FROM prev AS P0 INNER JOIN prev AS P3 ON P0.id=P3.id
GROUP BY P0.id;);

In questo modo non dovresti mettere gli altri campi che ti interessano nel GROUP BY
_________________
I say find someone you can love like crazy and who'll love you the same way back. And how do you find him? Forget your head and listen to your heart. I'm not hearing any heart. Run the risk, if you get hurt, you'll come back. Because, the truth is there, the truth is there is no sense living your life without this.

MyBlog
Top
Profilo Invia messaggio privato Invia e-mail HomePage MSN
Ghisa
Utente adulto
Utente adulto


Registrato: 06/02/04 20:29
Messaggi: 2588
Residenza: San Pellegrino Terme

MessaggioInviato: Mar Ago 08, 2006 3:40 pm    Oggetto: Rispondi citando

bubu ha scritto:
Hai provato a fare una query annidata?
del tipo:

SELECT P1.id AS ID, P1.rev AS REV, P1.data
FROM prev AS P1
WHERE p1.rev IN ( SELECT MAX(P0.REV) AS REV
FROM prev AS P0 INNER JOIN prev AS P3 ON P0.id=P3.id
GROUP BY P0.id;);

In questo modo non dovresti mettere gli altri campi che ti interessano nel GROUP BY

Le query annidate mancavano nel mio repertorio Sqllistico... Ho fatto una prova veloce veloce e sembra funzionare a meraviglia... Yeah

Grazie Bubu! Ti devo una birra! Very Happy Wink
_________________
Principio di Indeterminazione di Heineken: Non potrai mai essere sicuro del numero di birre che hai bevuto la notte scorsa.



LucaGhisalberti.com
Top
Profilo Invia messaggio privato HomePage MSN
Ghisa
Utente adulto
Utente adulto


Registrato: 06/02/04 20:29
Messaggi: 2588
Residenza: San Pellegrino Terme

MessaggioInviato: Mar Ago 08, 2006 3:54 pm    Oggetto: Rispondi citando

Ehm... la fretta è cattiva consigliera, non funziona nemmeno la tua, mi estrae lo stesso tutte le righe con lo stesso idPreventivo e non solo con il NrRevisione più alto... Crying or Very sad

Adesso provo un po' a smanettare con le query annidate... Sgrat!
_________________
Principio di Indeterminazione di Heineken: Non potrai mai essere sicuro del numero di birre che hai bevuto la notte scorsa.



LucaGhisalberti.com
Top
Profilo Invia messaggio privato HomePage MSN
vinz
Amministratore
Amministratore


Registrato: 12/12/03 12:56
Messaggi: 6648
Residenza: San Pellegrino Terme (Bergamo)

MessaggioInviato: Mar Ago 08, 2006 4:15 pm    Oggetto: Rispondi citando

Ghisa, prova questa:
Codice:
SELECT t1.Id, t1.Rev
FROM t1
WHERE (t1.id, t1.Rev) IN (SELECT t1.Id, MAX(t1.Rev) FROM t1 GROUP BY t1.Id)

Con Access non va (perché è limitato), spero che con SQLServer sì...
_________________
Let the future tell the truth and evaluate each one according to his work and accomplishments. The present is theirs; the future, for which I really worked, is mine.
Nikola Tesla
Top
Profilo Invia messaggio privato HomePage
bubu
Utente adolescente
Utente adolescente


Registrato: 24/03/06 20:57
Messaggi: 529
Residenza: Serina

MessaggioInviato: Mar Ago 08, 2006 4:33 pm    Oggetto: Rispondi citando

Ghisa ha scritto:

Grazie Bubu! Ti devo una birra! Very Happy Wink

Cool Cool
Vinz ha scritto:

Ghisa, prova questa:
Codice:
SELECT t1.Id, t1.Rev
FROM t1
WHERE (t1.id, t1.Rev) IN (SELECT t1.Id, MAX(t1.Rev) FROM t1 GROUP BY t1.Id)

Con Access non va (perché è limitato), spero che con SQLServer sì...

io ho provato questo con Access mettendo dei valori a caso e funziona:
SELECT t1.id, t1.rev, t1.data
FROM prev AS t1
WHERE (t1.rev) IN (SELECT MAX(t2.Rev)
FROM prev as t2 GROUP BY t2.Id);

certo bisognerebbe provare con un db più serio Rolling Eyes
fammi sapere come va con le query annidate Wink Wink
_________________
I say find someone you can love like crazy and who'll love you the same way back. And how do you find him? Forget your head and listen to your heart. I'm not hearing any heart. Run the risk, if you get hurt, you'll come back. Because, the truth is there, the truth is there is no sense living your life without this.

MyBlog
Top
Profilo Invia messaggio privato Invia e-mail HomePage MSN
vinz
Amministratore
Amministratore


Registrato: 12/12/03 12:56
Messaggi: 6648
Residenza: San Pellegrino Terme (Bergamo)

MessaggioInviato: Mar Ago 08, 2006 4:45 pm    Oggetto: Rispondi citando

Ce l'abbiamo fatta via Skype, usando una vista.
_________________
Let the future tell the truth and evaluate each one according to his work and accomplishments. The present is theirs; the future, for which I really worked, is mine.
Nikola Tesla
Top
Profilo Invia messaggio privato HomePage
Ghisa
Utente adulto
Utente adulto


Registrato: 06/02/04 20:29
Messaggi: 2588
Residenza: San Pellegrino Terme

MessaggioInviato: Mar Ago 08, 2006 4:55 pm    Oggetto: Rispondi citando

bubu ha scritto:
certo bisognerebbe provare con un db più serio Rolling Eyes
fammi sapere come va con le query annidate Wink Wink

E' andata bene, soprattutto con l'appoggio del vinz! Wink
vinz ha scritto:
Ce l'abbiamo fatta via Skype, usando una vista.

E adesso anche senza... Cool

Grazie a tutti per l'aiuto! Era davvero una troia 'sta query... Laughing
_________________
Principio di Indeterminazione di Heineken: Non potrai mai essere sicuro del numero di birre che hai bevuto la notte scorsa.



LucaGhisalberti.com
Top
Profilo Invia messaggio privato HomePage MSN
bubu
Utente adolescente
Utente adolescente


Registrato: 24/03/06 20:57
Messaggi: 529
Residenza: Serina

MessaggioInviato: Mar Ago 08, 2006 5:01 pm    Oggetto: Rispondi citando

Vinz ha scritto:
Ce l'abbiamo fatta via Skype, usando una vista.


OTTIMO
Spero di esservi stata utile Wink Wink
_________________
I say find someone you can love like crazy and who'll love you the same way back. And how do you find him? Forget your head and listen to your heart. I'm not hearing any heart. Run the risk, if you get hurt, you'll come back. Because, the truth is there, the truth is there is no sense living your life without this.

MyBlog
Top
Profilo Invia messaggio privato Invia e-mail HomePage MSN
Ghisa
Utente adulto
Utente adulto


Registrato: 06/02/04 20:29
Messaggi: 2588
Residenza: San Pellegrino Terme

MessaggioInviato: Ven Ago 25, 2006 11:15 am    Oggetto: Rispondi citando

Altro problemuccio.... ho due db con la stessa struttura, ma con record diversi.

Dovrei copiare un record da una tabella di un db a quella dell'altro... esiste una query del tipo

INSERT INTO dbo.contatti.Ditte
VALUES (select * from dbo.contatti2.Ditte where ID = 100)

Io ho trovato questa, ma, come immaginavo, quando la lancio non solo mi da errori, ma mi manda anche a cagare... Laughing

Devo far per forza tutto a manina? Mad
_________________
Principio di Indeterminazione di Heineken: Non potrai mai essere sicuro del numero di birre che hai bevuto la notte scorsa.



LucaGhisalberti.com
Top
Profilo Invia messaggio privato HomePage MSN
acadam
Utente neonato
Utente neonato


Registrato: 11/03/05 17:55
Messaggi: 42

MessaggioInviato: Ven Ago 25, 2006 11:58 am    Oggetto: Rispondi citando

ciao,
hai provato con

INSERT INTO [nomeDb1].dbo.nomeTabella (...elencoCampi...)
SELECT ...elencoCampi... FROM [nomeDb2].dbo.nomeTabella

ovviamente nomeTabella ed elencoCampi sono uguali.

ciao
davide
_________________
"e, in mezzo a tutto questo perdersi, c'è un uscio chiuso nell'anima
chissà se ti ricordi la tua chiave dov'è?
e, in mezzo a tutto questo sciogliersi, fa più il destino o la volontà?
E se la risposta è amore, la domanda qual è? qual è?"
Top
Profilo Invia messaggio privato HomePage
vinz
Amministratore
Amministratore


Registrato: 12/12/03 12:56
Messaggi: 6648
Residenza: San Pellegrino Terme (Bergamo)

MessaggioInviato: Ven Ago 25, 2006 1:31 pm    Oggetto: Rispondi citando

Ghisa ha scritto:
Dovrei copiare un record da una tabella di un db a quella dell'altro... esiste una query del tipo

INSERT INTO dbo.contatti.Ditte
VALUES (select * from dbo.contatti2.Ditte where ID = 100)

Io ho trovato questa, ma, come immaginavo, quando la lancio non solo mi da errori, ma mi manda anche a cagare... Laughing

La versione corretta della query dovrebbe essere senza VALUES, quando i valori sono il risultato di una SELECT.

Quindi:
Codice:
INSERT INTO dbo.contatti.Ditte
SELECT * from dbo.contatti2.Ditte where ID = 100

Comunque posta l'errore, perché potrebbe anche essere un problema di permessi.
_________________
Let the future tell the truth and evaluate each one according to his work and accomplishments. The present is theirs; the future, for which I really worked, is mine.
Nikola Tesla
Top
Profilo Invia messaggio privato HomePage
Ghisa
Utente adulto
Utente adulto


Registrato: 06/02/04 20:29
Messaggi: 2588
Residenza: San Pellegrino Terme

MessaggioInviato: Ven Ago 25, 2006 2:00 pm    Oggetto: Rispondi citando

Ragazzi, grazie mille, l'unico problema a cui non avevo pensato è che l'ID è auroincrementante e non mi lascia inserire un valore... in questo modo mi da errore Sad

Mi sa che dovrò scrivermi una query lunghissima specificando tutti i campi e tutti i valori Crying or Very sad

Adesso che ci penso però... non è che c'è un modo per fare una select evitando di estrarre un campo... che ne so, magari un

SELECT * WITHOUT ID... Rolling Eyes

Mi sa che forse ho un po' troppa immaginazione... Laughing
_________________
Principio di Indeterminazione di Heineken: Non potrai mai essere sicuro del numero di birre che hai bevuto la notte scorsa.



LucaGhisalberti.com
Top
Profilo Invia messaggio privato HomePage MSN
Mostra prima i messaggi di:   
Questo forum è chiuso: Non puoi inserire, rispondere o modificare gli argomenti.   Quest'argomento è chiuso: Non puoi inserire, rispondere o modificare i messaggi.    Indice del forum -> L'angolo di Leonardo Da Vincienzomanzoni.com Tutti i fusi orari sono GMT 1 ora
Vai a 1, 2  Successivo
Pagina 1 di 2

 
Vai a:  
Non puoi inserire nuovi argomenti
Non puoi rispondere a nessun argomento
Non puoi modificare i tuoi messaggi
Non puoi cancellare i tuoi messaggi
Non puoi votare nei sondaggi


Powered by phpBB © 2001, 2005 phpBB Group
phpbb.it