[Access] Ricavare un determinato valore di un campo di una tabella

martedì 17 maggio 2011 - 16.23

Riemann Profilo | Newbie

Ciao a tutti!
Supponiamo di avere Tabella2 con i campi: Giorno (di tipo data) e C (di tipo numerico). Vorrei:
• Selezionare n valori del campo C (da Data1 a Data2), ordinandoli in modo crescente, e
• Ricavare il valore di posizione j (j=1,…,n) dalla suddetta serie ordinata di valori
Facendo delle ricerche nella guida di Access, inserendo la parola TOP, ho trovato:
“Predicati ALL, DISTINCT, DISTINCTROW, TOP (linguaggio SQL per Microsoft Access)”
riguardo TOP c'è un esempio su come ricavare i primi j valori di un recordset ordinato:

SELECT TOP j C
FROM Tabella2
WHERE Giorno BETWEEN Data1 AND Data2
ORDER BY C ASC

Il predicato TOP non è in grado di scegliere tra valori uguali, cioè se il j-esimo e il
(j+1)-esimo coincidono, la query restituirà j+1 record.
Ma comunque basterebbe ricavare il valore massimo del recordset ottenuto...
però non saprei come fare...
Non saprei se il predicato TOP sia il metodo giusto per risolvere il problema o se
ci siano metodi migliori… voi come lo risolvereste?

dinoxet Profilo | Senior Member

per avere il valore massimo di c puoi scrivere così :

SELECT TOP j max(C) as massimoc
FROM Tabella2
WHERE Giorno BETWEEN Data1 AND Data2
ORDER BY max(C) ASC



non so se ti basta
DINOXET
__________________________________________
impossible is only a word

Riemann Profilo | Newbie

Ciao Dinoxet, grazie dell'aiuto. Con il codice che mi hai postato mi risulta il massimo di C,
però io vorrei il j-esimo valore della serie ordinata (in modo crescente) dei valori di C.
Faccio un esempio con j = 3 :
6 - 2 - 4 - 11 - 9 - 13 - 7 --> valori del campo C
2 - 4 - 6 - 7 - 9 - 11 - 13 --> serie ordinata (in modo crescente) dei valori di C
2 - 4 - 6 --> TOP 3
6 --> 3° valore della serie ordinata (che corrispone al massimo valore di TOP 3)
Spero che sia abbastanza chiaro il problema...

dinoxet Profilo | Senior Member

prova così :
select max(massimoc) as totptop
from(
SELECT TOP j max(C) as massimoc
FROM Tabella2
WHERE Giorno BETWEEN Data1 AND Data2
ORDER BY max(C) ASC)

vedi se va bene
DINOXET
__________________________________________
impossible is only a word

Riemann Profilo | Newbie

Ciao grazie Dinoxet, il tuo codice mi da ancora il massimo di C, però mi hai dato uno spunto per trovare la soluzione:

SELECT Max(C) AS maxtopj
FROM (SELECT TOP j C
FROM Tabella2
WHERE Giorno BETWEEN Data1 AND Data2
ORDER BY C ASC)

Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2017
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5