Punto informatico Network
Login Esegui login | Non sei registrato? Iscriviti ora (è gratuito!)
Username: Password:
  • Annuncio Pubblicitario

[SQL] AIUTO QUERY SQL

Il forum per tutti i developer. Leggere attentamente il regolamento di sezione prima di postare.

[SQL] AIUTO QUERY SQL

Messaggioda yeah782000 » mer ago 25, 2004 1:16 pm

raga...ho bisogno di aiuto...
In un db access ho una tabella con questi campi:
data - entrata
Ho creato una query dove visualizzo il valore piu' alto nel campo "entrata".
Il problema pero' e' che io vorrei vedere nel risultato della query sia il valore piu' alto del campo entrata ( e fin qui ok) e anche la data che corrisponde appunto a quel record.
Access pero' non me lo permette dicendomi che la data deve far parte di una funzione di aggregazione.
Come faccio ?

Grazie[?]

<font color="red">Edited by Zane: Il tag non è opzionale, grazie</font id="red">
Avatar utente
yeah782000
Silver Member
Silver Member
 
Messaggi: 1385
Iscritto il: lun apr 19, 2004 10:06 am

Messaggioda MaxPower » mer ago 25, 2004 11:03 pm

sono un po' arruginito...
prova così al massimo perdi 5 minuti...
in sql...

select data, entrata
from tabella
where entrata = (select max(entrata) from tabella);

spero vada bene


ciao
Avatar utente
MaxPower
Senior Member
Senior Member
 
Messaggi: 198
Iscritto il: dom lug 11, 2004 11:11 am

Messaggioda yeah782000 » gio ago 26, 2004 8:33 am

mitico !!!!!!!!!!!
funziona !!!!!!!!!!!!!!!
grazie 1000 !!!!!!!!!!![^]
Avatar utente
yeah782000
Silver Member
Silver Member
 
Messaggi: 1385
Iscritto il: lun apr 19, 2004 10:06 am


Messaggioda yeah782000 » gio ago 26, 2004 8:54 am

ciao MaxPower....
la tua query funziona benissimo ma se la utilizzo per trovare il valore piu' basso (ovviamente inserendo MIN al posto di MAX) non funziona ...
Mi da 0 come valore piu' basso ... in realta' pero' non ci sono valori pari a 0 tranne quello che access mette per default nel nuovo record da inserire... non e' che mi trova quello magari ?![?]
Grazie per l'aiuto !
Avatar utente
yeah782000
Silver Member
Silver Member
 
Messaggi: 1385
Iscritto il: lun apr 19, 2004 10:06 am

Messaggioda MaxPower » gio ago 26, 2004 10:01 am

credo proprio di si...
poiché 0 è il valore più basso come risultato ti da quello...
ma in alcuni record non hai inserito valore entrata e quindi entrata è stato per default inizializzato a 0???
se è così bisogna riformulare la query completamente,
poiché aggiungendo anche la condizione (entrata <> 0) nella where
non ti segnala niente, poiché per prima cosa viene svolta la query più nidificata, e poi vengono valutate le altre condizioni, se ricordo bene...

ciao
Avatar utente
MaxPower
Senior Member
Senior Member
 
Messaggi: 198
Iscritto il: dom lug 11, 2004 11:11 am

Messaggioda yeah782000 » gio ago 26, 2004 10:17 am

ciao ...ecco la mia query:
SELECT tb_movimenti.DATA_MOVIMENTO, tb_movimenti.ENTRATE AS MIN_ENTRATA
FROM tb_movimenti
WHERE (((tb_movimenti.ENTRATE)=((SELECT MIN (tb_movimenti.ENTRATE) FROM tb_movimenti))) AND ((tb_movimenti.ID_DETTAGLIO_ENTRATE_EST)=2));

la condizione (tb_movimenti.ID_DETTAGLIO_ENTRATE_EST)=2)mi serve per estrapolare solo una parte delle entrate nella tabella dei movimenti (tb_movimenti).
Per quello ti dicevo che non ci sono valori pari a 0 tranne quello che access mette nel record nuovo da inserire.
ho provato anche ad inserire la condizione <>0 ma non funziona !
help me !![B)]
Avatar utente
yeah782000
Silver Member
Silver Member
 
Messaggi: 1385
Iscritto il: lun apr 19, 2004 10:06 am

Messaggioda MaxPower » gio ago 26, 2004 10:54 am

la query che hai scritto esegue le condizioni in tale ordine, credo...
1. seleziona minimo entrate da tabella
2. seleziona campi dove dettaglio_entrate_est = 2
ora non ricordo precisamente come opera sql, forse poiché
il minimo cercato con la 1. non corrisponde ad alcun campo
ricarcato con la 2., allora il risultato = 0.
dovresti prima cercare i campi con dettaglio_entrate_est = 2 e poi
di questi cercare il minimo...
prova così, modifica solo ultima riga...
where entrate =
(select min(entrate)
from tabella where
dettaglio_entrate_est = 2)

ciao
Avatar utente
MaxPower
Senior Member
Senior Member
 
Messaggi: 198
Iscritto il: dom lug 11, 2004 11:11 am

Messaggioda yeah782000 » gio ago 26, 2004 12:40 pm

non va ![?]
Avatar utente
yeah782000
Silver Member
Silver Member
 
Messaggi: 1385
Iscritto il: lun apr 19, 2004 10:06 am

Messaggioda MaxPower » gio ago 26, 2004 1:04 pm

select data, entrata
from tabella
where entrata =
(select min(entrata) from tabella where dettaglio = 2);

non va???
ti da errore o ti restituisce sempre 0???
la subquery così fatta dovrebbe calcolare il minimo delle entrate solo quando dettaglio = 2...
successivamente la query generale ti seleziona i campi quando l'entrata è uguale a quella minima prima calcolata....
ti trovi come ragionamento?

ciao
Avatar utente
MaxPower
Senior Member
Senior Member
 
Messaggi: 198
Iscritto il: dom lug 11, 2004 11:11 am

Messaggioda yeah782000 » gio ago 26, 2004 1:22 pm

miticooooo !!!! era solo un problema di sintassi.... tutta colpa de ste meledette paerentesi !!!!

SELECT tb_movimenti.DATA_MOVIMENTO, tb_movimenti.ENTRATE AS MIN_ENTRATA
FROM tb_movimenti
WHERE (((tb_movimenti.ENTRATE)=(SELECT MIN (tb_movimenti.ENTRATE) FROM tb_movimenti
WHERE (tb_movimenti.ID_DETTAGLIO_ENTRATE_EST)=2)));

grazie 1000 amico..... [^]
Avatar utente
yeah782000
Silver Member
Silver Member
 
Messaggi: 1385
Iscritto il: lun apr 19, 2004 10:06 am

Messaggioda MaxPower » gio ago 26, 2004 1:36 pm

di nulla....alla prox
Avatar utente
MaxPower
Senior Member
Senior Member
 
Messaggi: 198
Iscritto il: dom lug 11, 2004 11:11 am

Messaggioda yeah782000 » gio ago 26, 2004 2:31 pm

scusa max....
secondo te in questa query cosa c'e' che non funziona ?!
SELECT tb_movimenti.DATA_MOVIMENTO, tb_movimenti.ENTRATE AS MIN_ENTRATA
FROM tb_movimenti
WHERE (((tb_movimenti.ENTRATE)=(SELECT MIN (tb_movimenti.ENTRATE) FROM tb_movimenti
WHERE ((tb_movimenti.DATA_MOVIMENTO) Between [Forms]![maschera_dettaglio].[periodo_dal] And [Forms]![maschera_dettaglio].[al])) and (tb_movimenti.ID_DETTAGLIO_ENTRATE_EST)=2));

E' praticamnete la stessa query di prima.... ho solo aggiunto la possibilita' di fare il calcolo minimo in un arco temporale che si inserisce nella maschera_dettaglio.
Anche in questo caso per il valore massimo non c'e' nessun problema e funziona benissimo.... ho sostituito max con min (scusa il gioco di parole) e non va.... mi da 0 !!!!
Sicuramente c'e' un problema di priorita' di calcolo nella query.... secondo te dov'e' l'errore?
grazie ancora[:-H]
Avatar utente
yeah782000
Silver Member
Silver Member
 
Messaggi: 1385
Iscritto il: lun apr 19, 2004 10:06 am

Messaggioda MaxPower » ven ago 27, 2004 11:57 am

il problema ora è che vuoi calcolare entrata minimo in un intervallo di tempo sempre solo per la condizione est = 2...
credo che la giusta sequenza di operazioni da seguire sia...
1. considerare est = 2
2. considerare periodo temporale
3. calcolare il minimo in base a 1. e 2.
prova un po' così...

select data, entrata
from tabella
where entrata =
(select min(entrata) from tabella where
(dettaglio = 2) and (data between data_dal and data_al));

che nel tuo caso dovrebbe essere...

SELECT tb_movimenti.DATA_MOVIMENTO, tb_movimenti.ENTRATE AS MIN_ENTRATA
FROM tb_movimenti
WHERE tb_movimenti.ENTRATE =
(SELECT MIN (tb_movimenti.ENTRATE) FROM tb_movimenti
WHERE (tb_movimenti.DATA_MOVIMENTO Between [Forms]!
[maschera_dettaglio].[periodo_dal] And [Forms]![maschera_dettaglio].[al]) and (tb_movimenti.ID_DETTAGLIO_ENTRATE_EST=2));

prova un po'...e occhio alle parentesi...

ciao
Avatar utente
MaxPower
Senior Member
Senior Member
 
Messaggi: 198
Iscritto il: dom lug 11, 2004 11:11 am

Messaggioda yeah782000 » sab ago 28, 2004 2:49 pm

grazie 1000 max!!!! hai fatto ancora centro...!!!!
maeldette ste parentesi !!!!!!![:D]

grazie ![^]
Avatar utente
yeah782000
Silver Member
Silver Member
 
Messaggi: 1385
Iscritto il: lun apr 19, 2004 10:06 am

Messaggioda MaxPower » sab ago 28, 2004 7:20 pm

di nulla...

alla prossima
Avatar utente
MaxPower
Senior Member
Senior Member
 
Messaggi: 198
Iscritto il: dom lug 11, 2004 11:11 am


Torna a Programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 3 ospiti

Powered by phpBB © 2002, 2005, 2007, 2008 phpBB Group
Traduzione Italiana phpBB.it

megalab.it: testata telematica quotidiana registrata al Tribunale di Cosenza n. 22/09 del 13.08.2009, editore Master New Media S.r.l.; © Copyright 2008 Master New Media S.r.l. a socio unico - P.I. 02947530784. GRUPPO EDIZIONI MASTER Spa Tutti i diritti sono riservati. Per la pubblicità: Master Advertising