Newsgroup: it.comp.appl.access
Titolo: SQL:Estrarre dati per fasce orarie.

Ciao
Come posso estrarre e/o contare record per fasce orarie?
Mi spiego meglio.
Avendo un campo orario (e qui devo aprire una parentesi per ringraziare
Roberto per la creazione del campo ora)
voglio avere un conteggio di record dalle 8:00:00 alle 12:00:00, dalle
12:00:01 alle 20:00:00 e dalle 20:00:01 alle 7:59:59
Ho provato a cercare sulla guida all'uso di access 2000 e su un altro
manuale sql ma non trovo nulla.
Come posso risolvere? Qualche ideuzza?
Ciao
TT

 ha scritto nel messaggio
news:i0Ubc.110192$FJ6.4...@twister1.libero.it...

Puoi usare 3 Query.... ma non sapendo cosa intendi come Campo Orario
dò per scontato sia un Campo DATA impostato come Ora estesa....!!!!
"SELECT * FORM Tabella Where CampoOre Beetwen #08:00:00# AND #12:00:00"
Per contarlo usa il RecordCount del Recordset nel quale lo carichi.....!!!
Ciao.
@Alex.

 ha scritto nel messaggio
news:i0Ubc.110192$FJ6.4...@twister1.libero.it...

Usando per i criteri di selezion/filtraggio l'operatore Between ...And (vedi
help); visto però che per la terza fascia l'orario di inizio è maggiore
dell'orario di fine, devi dividere questa fascia in due sottofasce: la prima
dalle 20:00:01 alle 23:59:59 e la seconda dalle 00:00:00 alle 7:59:59,
quindi metterai i due criteri di selezione in OR.
Se usi l'operatore Between ... And in VBA o SQL, visto che il campo orario è
di tipo Data/ora, ricordati di racchiudere i due secondi termini di paragone
tra due caratteri #, insomma:
MioOrario Between #08:00:00# And #12:00:00#
-- 
Roberto
---------------------------------------------
il Sito Comune di it.comp.appl.access:
http://www.sitocomune.com
---------------------------------------------

 ha scritto nel messaggio
news:U%Wbc.110441$FJ6.4...@twister1.libero.it...

Ciao
Come avevi detto tu ho fatto la query, utilizzando però query by example.
Ho inserito nei criteri BETWEEN 06:00:00 AND 23:59:59 ............
Lancio la query e, con grande sorpresa, non visualizzo niente.Vado a vedere
l'SQL e trovo
SELECT Count(qTotCorseInserite.OraIns) AS Notturno
FROM tTelefonate
HAVING (((Count(OraInserimento)) Between #12/30/1899 21:0:0# And #12/30/1899
23:59:59#)) OR (((Count(OraInserimento.OraIns)) Between #12/30/1899# And
#12/30/1899 6:59:59#));
Eeeehhhhh? Cos'è sta roba? Allora modifico con
SELECT Count(qTotCorseInserite.OraIns) AS Notturno
FROM tTelefonate
HAVING (((Count(OraInserimento)) Between #21:0:0# And #23:59:59#)) OR
(((Count(OraInserimento.OraIns)) Between #00:00:00# And #6:59:59#));
Rilancio la query e, ricon grande sorpresa, non visualizzo nulla.
Ma non avrà mica ragione il PC e da gran testardo digito
SELECT Count(*) AS Notturno
FROM tTelefonate
WHERE (OraInserimento Between #21:0:0# And #23:59:59#) OR (OraInserimento
Between #00:00:00# And #6:59:59#);
finalmente trovo il mio 1452. Controllerò domani, adesso è tardi. Questo fa
capire ce è meglio scrivere le query con SQL.Il query by example è una
........
Però, non posso crearmi dei campi Notturno, mattina pomeriggio e
visualizzare tutti i conteggi per ogni campo tutto con una query?
Grazie Ciao
TT

 ha scritto nel messaggio
news:1d%bc.110820$FJ6.4...@twister1.libero.it...

Se ti serve solamente conoscere solamente i tre totali, non vale la pena
fare una query; creati una maschera non associata contenete tre caselle di
testo non associate, quindi effettua i conteggi delle persone nelle varie
fasce con delle funzioni DCount; nell'origine controllo della prima casella
di testo scrivi:
= DCount("*"; "tTelefonate"; "(OraInserimento Between #07:00:00# And
#12:00:00#)
nell'origene controllo della seconda scrivi:
= DCount("*"; "tTelefonate"; "(OraInserimento Between #12:01:00# And
#20:59:00#)
e nell'origine controllo della terza casella di testo scrivi:
= DCount("*"; "tTelefonate"; "(OraInserimento Between #21:0:0# And
#23:59:59#) OR (OraInserimento Between #00:00:00# And #6:59:59#)")


 visualizzare tutti i conteggi per ogni campo tutto con una query?
Circa si', pero' non ti conviene creare tre campi in piu', ma basta creare
un nuovo campo (o meglio una nuova colonna) "FasciaOraria" contenente una
stringa in chiaro "notte" " mattina" ecc., il che poi viene buono per fare
conteggi, grafici ecc. gia' ripartiti comodamente per fascia oraria. Il
vantaggio e' che poi conti per criteri di uguaglianza anziche' dei
complessi "between", e sara' piu' facile fare report con gli strumenti e i
wizard di access.
nella stringa gioca con i leading spaces per favorire il naturale
ordinamento delle fasce ("notte" viene dopo " mattina", "mattina" viene
dopo " notte")
Io uso 4 fasce orarie, la colonna FASCIAORARIA viene aggiornata dalla
seguente query che va a vedere la colonna TIMESTAMP_ACCETTAZIONE:
UPDATE [TBLLOC ACCETTAZIONI] 
SET [TBLLOC ACCETTAZIONI].FASCIAORARIA = 
IIf(Format([TIMESTAMP_ACCETTAZIONE],"hh") Between 0 And 6,"Notte",
IIf(Format([TIMESTAMP_ACCETTAZIONE],"hh") Between 7 And 13," Mattina",
IIf(Format([TIMESTAMP_ACCETTAZIONE],"hh") Between 14 And 19," Pomeriggio",
IIf(Format([TIMESTAMP_ACCETTAZIONE],"hh") Between 20 And 23," Sera"))));
ciao
R.
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it


Grazie per la risposta.
Purtroppo non posso fare come suggerisce risparmioso, comunque grazie.
Passiamo a Roberto.
Non capisco la differenza tra DCount ed il count() qual'č?
Il tuo metodo, che ho utilizzato, funziona benissimo ma ben se mi servono i
risultati in tre controlli cosa che faccio.
Se voglio avere i 3 risultati in una query che conta quante telefonate sono
state fatte nelle tre fasce?
Es di risultato che voglio ottenere:
Notturno (dalle 21 alle 07 del giorno dopo)          Mattina (dalle 7 alle
13)         Pomeriggio (dalle 13 alle 21)
                    134
1745                                        2054
Ripeto se voglio avere i tre risultati separati va benissimo come dicevi tu.
Grazie
TT
PS
Perchč non funziona? pur avendo151500 orapartenza vale 00.00.00
    OraPartenza = Format(Forms![mTelData]![DaOra], "hh.mm.ss")
Devo per forza utilizzare CDate con mid, left, right?
L'obiettivo finale č:
Se sono selezionate le due date e l'interruttore č pigiato (true), filtro la
maschera con
    Me.Filter = "INS_DATE BETWEEN Forms![mTelData]![DaData] AND
Forms![mTelData]![AData]"
se sono state digitate le due ore in altri due textbox e l'interruttore ORA
č pigiato filtro la maschera come sopra ma con le ore.
Se sono state digitate entrambe e gli interruttori sono pigiati filtro con
tutto, data e ora. (Devo ancora vedere come fare, un passetto alla volta.)
Ancora grazie
Caio
TT

 Devo per forza utilizzare CDate con mid, left, right?
-- 



Grazie per la risposta.
Visto che sei cosě figo dammi anche sta risposta va.
Ho usato il dcount come dicevi il 05/04/04 alle 11:46 in una maschera che
filtro con dued ate, se sono inserita in txt box, e/o con due ore, se sono
contenute in altre txt box.Il filtro funzia ma la dcoun, ovviamente, conta
mTelData quindi tutto , come posso fare ad adattarla alla mia form filtrata?
Riprendendo l'esempio dell'altra volta
= DCount("*"; "tTelefonate"; "(OraInserimento Between #21:0:0# And
#23:59:59#) OR (OraInserimento Between #00:00:00# And #6:59:59#)")
Come posso ottenere il conteggio del form filtrato, quindi non tTelefonate
che contiene tutti i record, ma da FormTelefonate?
Ciao
TT

 TT
-- 



Ciao
La maschera si becca tutti i record di una query, la filtro con il codice
Private Sub IntFiltro_Click()
    filtro = ""
    If Me.IntFiltro.Value = True Then
        If Me.IntData.Value = True Then
            filtro = "INS_DATE BETWEEN " & DataPartenza & " AND " &
DataArrivo
        End If
        If Me.IntOra.Value = True Then
                If filtro = "" Then
                    filtro = "OraIns BETWEEN " & OraPartenza & " AND " &
OraArrivo
                Else
                    filtro = filtro & " AND " & "OraIns BETWEEN " &
OraPartenza & " AND " & OraArrivo
                End If
            End If
        Me.IntData.Enabled = False
        Me.IntOra.Enabled = False
        Me.DaData.Enabled = False
        Me.AData.Enabled = False
        Me.DaOra.Enabled = False
        Me.AOra.Enabled = False
        'MsgBox filtro
        Me.Filter = filtro
        Me.FilterOn = True
    Else
        filtro = ""
        Me.Filter = ""
        Me.FilterOn = False
        Me.IntData.Enabled = True
        Me.IntOra.Enabled = True
        Me.DaData.Enabled = True
        Me.AData.Enabled = True
        Me.DaOra.Enabled = True
        Me.AOra.Enabled = True
    End If
End Sub
Il filtro generato funziona ed è il seguente (caso in cui ci sia sia la data
che l'ora).
INS_DATE BETWEEN #31/03/2004# AND #03/04/2004# AND OraIns BETWEEN #7.30.00#
AND #12.15.00#
Prendendo l'esempio dell'altro post
= DCount("*"; "tTelefonate"; "(OraIns Between #21:0:0# And
#23:59:59#) OR (OraIns Between #00:00:00# And #6:59:59#)")
questo dovrebbe contare 0, in realtà restituisce xxx perchè ha tTelefonate
come parametro.Posso fargli contare le
telefonate del form filtrato come sopra?
Grazie in anticipo.Ciao
TT

 Grazie in anticipo.Ciao



Grazie per la cortesia.
Purtroppo non funzia, mettendo nella txtbox
=DCount("*";"tTelefonate";Me.Filter & " And " & _
 "((OraIns Between #21:00:00# And #23:59:59#) OR _
(OraIns Between #00:00:00# And #6:59:59#))")
all'apertura della maschera appare #Nome? Rileggedo il contenuto della
txtbox
vedo che qualcosa è cambiato.
Ma perchè fa [Me].[Filter] ? Che non sia quello il problema!
Bo
Ciao
TT

 TT
Buona Pasua


 ha scritto nel messaggio
news:k4udc.119301$FJ6.4...@twister1.libero.it...

Ciao,
stessa cosa! #nome?
Potrei fare con vba
txt7.Value = DCount("*", "tTelefonate", Forms![mTelDataOra].Filter & _
" And (OraIns Between #07:00:00# And #12:00:00#)")
ma se la maschera non è filtrata non conta correttamente.
Me.Filter =""
quindi alla fine
txt7.Value = Between And And (OraIns Between #07:00:00# And #12:00:00#)
Ciao e buona Pasqua