Newsgroup: it.comp.appl.access
Titolo: Creare una classifica "tra classifiche"

Ciao a tutti. Il titolo non può suo malgrado che lasciare un po'
perplessi... mi spiego meglio:
ho trovato estremamente utile ed interessante questa discussione
http://groups.google.it/group/it.comp.appl.access/browse_thread/thread/23535e4e6e03b9e0/9858f46cafe88838?lnk=gst&q=c
lassifica&rnum=6&hl=it#9858f46cafe88838
 perchè ho scoperto delle cose che non sapevo riguardo alle query in
generale.
Sebbene non mi sia proprio chiarissimo nei minimi dettagli il
meccanismo che ci sta sotto, poichè mi manca un po' di teoria, sono
riuscito ad applicare quanto detto percreare una classifica con dei
dati in mio possesso.
Il mio problema è che io devo fare più di una semplice classifica: ho
in una tabella un elenco di letture di giochi
installati in vari locali. ogni lettura riporta il totale incassato da
quella macchina, così che facendo le
differenze tra record di può calcolare l'incassato in un periodo di
tempo.
La tabella contiene, tra gli altri, questi campi:
NomeLocale
Scheda (Testo) - nome della macchina. Non univoco.
CodeID (Testo) - identificativo univoco della macchina.
Data (Data/ora) - data con ore:minuti:secondi
CNT (precisione doppia) - contatore del totale incassato al momento
della lettura.
Dato un tipo di [Scheda] ed un periodo di tempo prescelto, devo
ottenere una classifica che mi dica, quante volte
risulta prima per incasso (differenza [cnt(finale) - cnt(iniziale)] ),
quante II, quante III e via dicendo, senza
limiti di posizione. Cioè in teoria voglio anche sapere quante volte è
arrivata cinquantesima.
se potessi fare , ma non si può) un raggruppamento per [NomeLocale]
sulla classifica assoluta (filtrata ovviamente
per scheda e periodo), potrei fare un
SELECT miaTabella.Posizione, count(miaTabella.posizione) AS NrVolte
FROM miaTabella;
Potete aiutarmi a capire se mi sto perdendo in un bicchier d'acqua?
Grazie, Alessio :)

 ha scritto nel messaggio
news:1178261485....@l77g2000hsb.googlegroups.com...
Ciao a tutti. Il titolo non puň suo malgrado che lasciare un po'
perplessi... mi spiego meglio:
.....
Ciao Alessio
Ok ho provato a darti una risposta sul mio blog perchč cosě almeno ho potuto
usare l'HTML e fare tabelline ed evidenziare sub-query con i colori.
http://www.mdenittis.it/Blog/VisualizzaArticolo.asp?ID=3
Dalla query finale non dovrebbe essere complesso filtrare quante volte č
stata in una data posizione una data scheda in un dato periodo.
Ciao.
-- 
Simplex2
www.mdenittis.it
_______________

 Ciao.
Ciao Simplex2! Grazie per aver dedicato del tempo alla mia richiesta!
Mi rendo conto che non mi sono spiegato nel migliore dei modi, perchè
non ho detto a chiare lettere una cosa che lì per lì mi pareva si
capisse dal testo (invece no, rileggendola).
Quella che hai fatto tu è una classifica che io chiamo "assoluta", nel
senso che tiene conto del CodeID e dei sui risultati in un periodo,
oppure in una specifica data.
Ma non permette di ottenere ciò che devo ottenere io, per il fatto che
io devo avere tale classifica per [Scheda], non per codeID.
E posso avere 100 codeID relativi ad una scheda.
In pratica, per chiarire, in 100 sale giochi dei miei tempi avrei
potuto avere 100 codeID relativi alla Scheda BubbleBobble. [Scheda] è
il nome del gioco.
ed io voglio avere una classifica per [scheda], non per [codeID].
In parole povere:
dato un periodo di tempo prescelto, tra [dataInizio] e [dataFine]
data una [scheda],
presi ovviamente solo i locali in cui ho più di un codeID (a
prescindere dalla [scheda])
voglio sapere in quanti locali quella [scheda] (la somma degli incassi
dei codeID di quella [scheda] presenti nel locale, visto che un locale
potrebbe prenderne più di uno per tipo) è I/II/III e così via.
Io sono riuscito ad ottenere una classifica che prescinde dal locale,
quindi mi dà il risultato assoluto per CodeID senza tener conto dei
locali.
se provo a raggruppare per locale non ottengo ovviamente niente...
spero di essermi spiegato meglio...spesso non è facile spiegare bene
una cosa perchè si tendono a dare per scontati certi particolari che
si hanno in mente. chiedo scusa per questo.

si hanno in mente. chiedo scusa per questo.
No, purtroppo non riesco ancora a capire bene.
Tieni presente, però, che il metodo per applicare una classifica su un
raggruppamento ti costringe comunque
ad eseguire molteplici  join sulla medesima tabella annidate tra loro, come
ti ho fatto vedere nel mio esempio che può essere, didatticamente parlando,
ancora valido.
In pratica, l'esempio che ti ho fatto sulla classifica delle schede, che non
è "assoluto" ma "granulare", può essere reiterato per aggregazioni di ordine
superiore ovvero per schede o per locali.
Mi rendo conto che a parole è un po' difficile spiegare i problemi, ma se tu
potessi fornire, anche in modo semplificato, la struttura delle tabelle
interessate con chiare descrizioni dei campi , le relazioni ed i vincoli di
integrità forse un ulteriore riflessione la potremmo fare.


 integrità forse un ulteriore riflessione la potremmo fare.
Ok! non ci sono tante tabelle, ma una sola :)
La tabella si chiama "DatiGiochi"; ti enumero solo i campi che uso:
NomeLocale - Testo
CodeID - Testo
Scheda - Testo
Data - data/ora
Cnt - numerico (precisione doppia)
Facciamo un esempio:
NomeLocale - Bar Ella
contiene 3 codeID:
CodeID 1 - 123456 (Scheda = "PacMan")
CodeID 2 - 456789 (Scheda = "PacMan")
codeID3 - 789123 (SCheda = "BubbleBobble")
NomeLocale: Bar Collo
contiene 2 codeID:
CodeID 1 - 741852 (Scheda = "PacMan")
CodeID 2 - 852963 (Scheda = "StarWars")
supponi di avere un certo numero di record per ognuno di tali codeID;
lo stesso per altri locali ed altri giochi.
Questo ti porta ad avere la tabella DatiGiochi così come è.
si pussono fare così valutazioni di vario tipo: vedere quante Schede
(tipi di gioco) ho in ogni locale, quanti codeID, e calcoli relativi
all'incasso (differenza tra i [cnt] di due date).
Seguendo l'esempio della discussione che ho citato all'inizio del mio
primo post, ho creato una classifica di questo tipo: (per il periodo:
DataInizio - DataFine:)
Posiz - CodeID - Scheda - incasso
1°      - 123456 - PacMan - 50000
2°      - 456789 - PacMan - 43000
3°      - 741852 - PacMan - 41500
4°      - 789123 - BubbleBobble - 25000
5°      - 852963 - StarWars - 12000
eccetera
Invece devo ottenere una cosa del tipo
Scheda in esame: PacMan
n° volte 1° = 2 (ho un suo codeID primo in entrambe i locali
dell'esempio)
n° volte secondo = 1
questo è possibile solo se ho una classifica come quella che ho citato
MA per locale, cioè:
NomeLocale - Posiz - CodeID - Scheda - incasso
Bar Ella       - 1°      - 123456 - PacMan - 50000
Bar Ella       - 2°      - 456789 - PacMan - 43000
Bar Ella       - 3°      - 789123 - BubbleBobble - 25000
Bar Collo     - 1°      - 741852 - PacMan - 41500
Bar Collo     - 2°      - 852963 - StarWars - 12000
dalla quale potrei, con un Count(Posizione) ricavare ciò che cerco.
Incrocio le dita sperando di averti chiarito un po' le idee. io sto
continuando a pensare come fare ma non mi viene proprio in mente...
E grazie davvero per l'interesse!
Alessio

Guarda, a occhio non mi pare faccia differenza, comunque a 'sto punto
ti preciso anche che nel periodo selezionato, che è sempre di almeno
un mese, io calcolo non l'incasso totale, ma la media giornaliera.
quindi voglio sapere qual'è il locale che ha fatto la media
giornaliera pià alta.
ma è la stessa cosa, solo un passaggio in più. no?
;) Alessio

 ha scritto nel messaggio
news:1178628424.1...@q75g2000hsh.googlegroups.com...
Seguendo l'esempio della discussione che ho citato all'inizio del mio
primo post, ho creato una classifica di questo tipo: (per il periodo:
DataInizio - DataFine:)
Posiz - CodeID - Scheda - incasso
1°      - 123456 - PacMan - 50000
2°      - 456789 - PacMan - 43000
3°      - 741852 - PacMan - 41500
4°      - 789123 - BubbleBobble - 25000
5°      - 852963 - StarWars - 12000
eccetera
</QUOTE>
Attenzione.
In questa query, tu esegui prima un filtraggio sul periodo e poi compili la
classifica.
Nell'esempio che io ti ho proposto ho fatto una cosa diversa: ho compilato
una classifica per ogni periodo di osservazione (nel mio caso era
giornaliero, ma si può generalizzare). Il risultato della query era del
tipo:
Posiz - CodeID - - incasso
1°      - 123456 - - 50000
2°      - 456789 - - 43000
3°      - 741852 - - 41500
4°      - 789123 - - 25000
5°      - 852963 - - 12000
____________________
1°      - 456789  -  50000
2°      - 852963- - 43000
3°      - 741852 - - 41500
4°      - 789123 - - 25000
5°      - 123456 - - 12000
____________________
1°      - 123456 - - 50000
2°      - 852963 - - 43000
3°      - 789123 - - 41500
4°      - 741852 - - 25000
5°      - 456789  - - 12000
etc.....
Ovviamente basta una JOIN per ottenere la colonna scheda.
Prova ad applicare una query simile a quella che ti ho suggerito
raggruppando per 'locale', invece che per data.
Appena ho un po di tempo libero mi cimento.
Ciao.
Michele

 Appena ho un po di tempo libero mi cimento.
Ti amo in tutte le lingue del mondo... ;)
no, a parte scherzi, grazie davvero!