Valutazione 4.87/ 5 (100.00%) 5838 voti

Condividi:        

[ACCESS 2010] PROBLEMA CON QUERY SU CAMPO ORA

Vuoi potenziare i tuoi documenti Word? Non sai come si fa una macro in Excel? Devi creare una presentazione in PowerPoint?
Oppure sei passato a OpenOffice e non sei sicuro di come lavorare al meglio?

Moderatori: Anthony47, Flash30005

[ACCESS 2010] PROBLEMA CON QUERY SU CAMPO ORA

Postdi sbs » 31/01/14 13:57

Gentilissimi sono anni che uso un db di Access per la gestione di un corso.
una query ha iniziato quest’anno a fare le bizze.


Codice: Seleziona tutto
SELECT QRY_PER_CERTIFICATO_PRESENZE_2.IDSTUD, QRY_PER_CERTIFICATO_PRESENZE_2.ANNO, QRY_PER_CERTIFICATO_PRESENZE_2.MESE, QRY_PER_CERTIFICATO_PRESENZE_2.Nogog, QRY_PER_CERTIFICATO_PRESENZE_2.data, [b]Min[/b](QRY_PER_CERTIFICATO_PRESENZE_2.[inizio mattina]) AS [inizio mattina], [b]Max[/b](QRY_PER_CERTIFICATO_PRESENZE_2.[FINE mattina]) AS [MaxDiFINE mattina], [b]Min[/b](QRY_PER_CERTIFICATO_PRESENZE_2.[inizio pomeeriggio]) AS [inizio pomeeriggio], [b]Max[/b](QRY_PER_CERTIFICATO_PRESENZE_2.[FINE pomeriggio]) AS [FINE pomeriggio]
FROM QRY_PER_CERTIFICATO_PRESENZE_2
GROUP BY QRY_PER_CERTIFICATO_PRESENZE_2.IDSTUD, QRY_PER_CERTIFICATO_PRESENZE_2.ANNO, QRY_PER_CERTIFICATO_PRESENZE_2.MESE, QRY_PER_CERTIFICATO_PRESENZE_2.Nogog, QRY_PER_CERTIFICATO_PRESENZE_2.data
HAVING (((QRY_PER_CERTIFICATO_PRESENZE_2.data)=#1/28/2014#))
ORDER BY QRY_PER_CERTIFICATO_PRESENZE_2.IDSTUD, QRY_PER_CERTIFICATO_PRESENZE_2.data;


(nell'esempio ho messo un giorno nel campo data per ridurre il lavoro e vedere una singola giornata)
Ora il problema è che ogni studente ha diversi "inizi" e diverse “fini” (chi entra alle 8,30 chi entra alle 9 chi alle 10 chi esce alle 16 chi alle 18.

Ogni record è composto da identificativo studente identificativo lezione con un suo inizio ed una sua fine e lo stato di assente/presente.

Ogni giornata per uno studente è composto quindi da n record.

Il certificato deve beccare la prima entrata e l'ultima uscita.

Questo riusciva ad ottenerlo sino lo scorso anno con questa query

A seguito del cambio di versione ho pulito il db togliendo vecchie query e vecchi report e macro e ho tolto query ridondanti.

Ora la query è quella che vi ho indicato.

Ho provato a sostituire min con primo e max con ultimo ma ottengo risultati sempre non completi (errore soprattutto con i campi inizio)
Chi riesce a darmi una mano?
Avatar utente
sbs
Utente Junior
 
Post: 96
Iscritto il: 18/09/10 11:25

Sponsor
 

Postdi archimede » 31/01/14 18:14

La tua query attualmente è questa (giusto per renderla un minimo leggibile):
Codice: Seleziona tutto
select q.idstud, q.anno, q.mese, q.nogog, q.data,
       min(q.[inizio mattina]) as [inizio mattina],
       max(q.[fine mattina]) as [maxdifine mattina],
       min(q.[inizio pomeeriggio]) as [inizio pomeeriggio],
       max(q.[fine pomeriggio]) as [fine pomeriggio]
  from qry_per_certificato_presenze_2 as q
 group by q.idstud, q.anno, q.mese, q.nogog, q.data
having q.data=#1/28/2014#
 order by q.idstud, q.data;
ottengo risultati sempre non completi (errore soprattutto con i campi inizio)
Posta l'esempio di TUTTI i records contenuti in qry_per_certificato_presenze_2 relativi a UNO studente, il risultato che vorresti ottenere e il risultato che invece ti dà la query.

Alessandro
archimede
Moderatore
 
Post: 2755
Iscritto il: 07/11/02 12:41
Località: Genova

Re: [ACCESS 2010] PROBLEMA CON QUERY SU CAMPO ORA

Postdi sbs » 31/01/14 21:22

ok lunedì lo posto (pensavo di averlo in Cloud ma ho spento prima di aver terminato l'upload)
Avatar utente
sbs
Utente Junior
 
Post: 96
Iscritto il: 18/09/10 11:25

Re: [ACCESS 2010] PROBLEMA CON QUERY SU CAMPO ORA

Postdi sbs » 07/02/14 12:29

Mi scuso ma è stata una settimana di M+++A!

premetto che ho trovato una soluzione girando attorno al problema ma ecco le 3 query che avevo e che davano un problema di output.

Codice: Seleziona tutto
-----PRIMA FASE INIZIALE---------
SELECT
ANA_STUD.IDSTUD,
YEAR([DATA]) AS ANNO,
MONTH([DATA]) AS MESE,
ANA_STUD.ANASTUD AS NOGOG,
STUDENTI.DATA_NASCITA,
STUDENTI.[MATRICOLA _PROVVISORIA],
LEZIONI.INSEGNAMENTO,
LEZIONI.ID_DOC,
STUDENTI.COGNOME,
STUDENTI.NOME,
PRESENZA_LEZ.PRE,
LEZIONI.DALLE,
LEZIONI.ALLE,
IIF(HOUR([DALLE])<13,
([DALLE])) AS [MATTINO INIZIO],
IIF(HOUR([ALLE])<13,
([ALLE])) AS [MATTINO FINE],
IIF(HOUR([DALLE])>12,
([DALLE])) AS [POMERIGGIO INIZIO],
IIF(HOUR([ALLE])>13,
([ALLE])) AS [POMERIGGIO FINE]
FROM
((ANA_STUD INNER JOIN STUDENTI ON ANA_STUD.IDSTUD = STUDENTI.IDSTUD)
INNER JOIN PRESENZA_LEZ ON STUDENTI.IDSTUD = PRESENZA_LEZ.ID_STU)
INNER JOIN LEZIONI ON PRESENZA_LEZ.ID_LEZ = LEZIONI.ID_LEZ
WHERE (((PRESENZA_LEZ.PRE)=TRUE));
-----SECONDA FASE ---------
SELECT
[QRY_CERTIFICATO_PRESENZE_1].DATA AS ESPR1,
[QRY_CERTIFICATO_PRESENZE_1].IDSTUD,
[QRY_CERTIFICATO_PRESENZE_1].ANNO,
[QRY_CERTIFICATO_PRESENZE_1].ORE AS ESPR2,
[QRY_CERTIFICATO_PRESENZE_1].MESE,
[QRY_CERTIFICATO_PRESENZE_1].NOGOG,
[QRY_CERTIFICATO_PRESENZE_1].DATA_NASCITA,
[QRY_CERTIFICATO_PRESENZE_1].[MATRICOLA _PROVVISORIA],
[QRY_CERTIFICATO_PRESENZE_1].INSEGNAMENTO,
[QRY_CERTIFICATO_PRESENZE_1].COGNOME,
[QRY_CERTIFICATO_PRESENZE_1].NOME,
[QRY_CERTIFICATO_PRESENZE_1].PRE,
IIF(HOUR([DALLE])<13,[DALLE],"") AS [INIZIO MATTINA],
IIF(HOUR([ALLE])<13,[ALLE],"") AS [FINE MATTINA],
IIF(HOUR([DALLE])>12,[DALLE],"") AS [INIZIO POMEERIGGIO],
IIF(HOUR([ALLE])>12,[ALLE],"") AS [FINE POMERIGGIO]
FROM [QRY_CERTIFICATO_PRESENZE_1]
GROUP BY
[QRY_CERTIFICATO_PRESENZE_1].DATA,
[QRY_CERTIFICATO_PRESENZE_1].IDSTUD,
[QRY_CERTIFICATO_PRESENZE_1].ANNO,
[QRY_CERTIFICATO_PRESENZE_1].ORE,
[QRY_CERTIFICATO_PRESENZE_1].MESE,
[QRY_CERTIFICATO_PRESENZE_1].NOGOG,
[QRY_CERTIFICATO_PRESENZE_1].DATA_NASCITA,
[QRY_CERTIFICATO_PRESENZE_1].[MATRICOLA _PROVVISORIA],
[QRY_CERTIFICATO_PRESENZE_1].INSEGNAMENTO,
[QRY_CERTIFICATO_PRESENZE_1].COGNOME,
[QRY_CERTIFICATO_PRESENZE_1].NOME,
[QRY_CERTIFICATO_PRESENZE_1].PRE,
IIF(HOUR([DALLE])<13,[DALLE],""),
IIF(HOUR([ALLE])<13,[ALLE],""),
IIF(HOUR([DALLE])>12,[DALLE],""),
IIF(HOUR([ALLE])>12,[ALLE],"")
HAVING ((([QRY_CERTIFICATO_PRESENZE_1].PRE)=TRUE))
ORDER BY
[QRY_CERTIFICATO_PRESENZE_1].DATA,
[QRY_CERTIFICATO_PRESENZE_1].NOGOG;

-----TERZA FASE FINALE---------
SELECT
[QRY_CERTIFICATO_PRESENZE_2].IDSTUD,
[QRY_CERTIFICATO_PRESENZE_2].ANNO,
[QRY_CERTIFICATO_PRESENZE_2].MESE,
[QRY_CERTIFICATO_PRESENZE_2].NOGOG,
[QRY_CERTIFICATO_PRESENZE_2].DATA_NASCITA,
[QRY_CERTIFICATO_PRESENZE_2].[MATRICOLA _PROVVISORIA],
[QRY_CERTIFICATO_PRESENZE_2].COGNOME,
[QRY_CERTIFICATO_PRESENZE_2].NOME,
[QRY_CERTIFICATO_PRESENZE_2].PRE,
[QRY_CERTIFICATO_PRESENZE_2].DATA,
FIRST([QRY_CERTIFICATO_PRESENZE_2].[INIZIO MATTINA]) AS [PRIMODIINIZIO MATTINA]
FROM _____QRY_PER_CERTIFICATO_PRESENZE_2
GROUP BY [QRY_CERTIFICATO_PRESENZE_2].IDSTUD,
[QRY_CERTIFICATO_PRESENZE_2].ANNO,
[QRY_CERTIFICATO_PRESENZE_2].MESE,
[QRY_CERTIFICATO_PRESENZE_2].NOGOG,
[QRY_CERTIFICATO_PRESENZE_2].DATA_NASCITA,
[QRY_CERTIFICATO_PRESENZE_2].[MATRICOLA _PROVVISORIA],
[QRY_CERTIFICATO_PRESENZE_2].COGNOME,
[QRY_CERTIFICATO_PRESENZE_2].NOME,
[QRY_CERTIFICATO_PRESENZE_2].PRE,
[QRY_CERTIFICATO_PRESENZE_2].DATA
HAVING ((([QRY_CERTIFICATO_PRESENZE_2].ANNO)=[DIGITA ANNO 4 CIFRE]) AND (([QRY_CERTIFICATO_PRESENZE_2].MESE)=[DIGITA MESE SENZA LO ZERO]) AND (([QRY_CERTIFICATO_PRESENZE_2].PRE)=TRUE))
ORDER BY [QRY_CERTIFICATO_PRESENZE_2].IDSTUD,
[QRY_CERTIFICATO_PRESENZE_2].DATA;






L'output non aveva valorizzato correttamente inizio mattina, compariva un valore a caso oppure addirittura il null!

Visto che lunedì dovevo inviare i certificati ho risolto così!


Codice: Seleziona tutto

---- CERT_PRES_LEZ_PRIMA FASE-----

SELECT
ANA_STUD.IDSTUD,
ANA_STUD.ANASTUD,
YEAR([DATA]) AS ANNO,
LEZIONI.INSEGNAMENTO,
MONTH([DATA]) AS MESE,
STUDENTI.DATA_NASCITA,
STUDENTI.[MATRICOLA _PROVVISORIA],
LEZIONI.INSEGNAMENTO,
LEZIONI.DATA,
LEZIONI.ID_DOC,
STUDENTI.COGNOME,
STUDENTI.NOME,
PRESENZA_LEZ.PRE,
LEZIONI.DALLE,
LEZIONI.ALLE,
IIF(HOUR([DALLE])<13,([DALLE])) AS [MATTINO INIZIO],
IIF(HOUR([ALLE])<13,([ALLE])) AS [MATTINO FINE],
IIF(HOUR([DALLE])>12,([DALLE])) AS [POMERIGGIO INIZIO],
IIF(HOUR([ALLE])>13,([ALLE])) AS [POMERIGGIO FINE],
LEZIONI.ORE
FROM ((ANA_STUD INNER JOIN STUDENTI ON ANA_STUD.IDSTUD=STUDENTI.IDSTUD) INNER JOIN PRESENZA_LEZ ON STUDENTI.IDSTUD=PRESENZA_LEZ.ID_STU) INNER JOIN LEZIONI ON PRESENZA_LEZ.ID_LEZ=LEZIONI.ID_LEZ
WHERE (((PRESENZA_LEZ.PRE)=TRUE))
GROUP BY ANA_STUD.IDSTUD,
ANA_STUD.ANASTUD,
LEZIONI.INSEGNAMENTO,
STUDENTI.DATA_NASCITA,
STUDENTI.[MATRICOLA _PROVVISORIA],
LEZIONI.INSEGNAMENTO,
LEZIONI.DATA,
LEZIONI.ID_DOC,
STUDENTI.COGNOME,
STUDENTI.NOME,
PRESENZA_LEZ.PRE,
LEZIONI.DALLE,
LEZIONI.ALLE,
ANA_STUD.ANASTUD,
LEZIONI.ORE;

------CERT_PRES_LEZ_SECONDA FASE-----
SELECT
[CERT_PRES_LEZ_PRIMA FASE].ANASTUD,
[CERT_PRES_LEZ_PRIMA FASE].IDSTUD,
[CERT_PRES_LEZ_PRIMA FASE].COGNOME,
[CERT_PRES_LEZ_PRIMA FASE].DATA,
[CERT_PRES_LEZ_PRIMA FASE].NOME,
MIN([CERT_PRES_LEZ_PRIMA FASE].[MATTINO INIZIO]) AS [MINDIMATTINO INIZIO],
MAX([CERT_PRES_LEZ_PRIMA FASE].[MATTINO FINE]) AS [MAXDIMATTINO FINE],
MIN([CERT_PRES_LEZ_PRIMA FASE].[POMERIGGIO INIZIO]) AS [MINDIPOMERIGGIO INIZIO],
MAX([CERT_PRES_LEZ_PRIMA FASE].[POMERIGGIO FINE]) AS [MAXDIPOMERIGGIO FINE]
FROM [CERT_PRES_LEZ_PRIMA FASE]
WHERE ((([CERT_PRES_LEZ_PRIMA FASE].ANNO)=[DIGITA ANNO 4 CIFRE]) AND (([CERT_PRES_LEZ_PRIMA FASE].MESE)=[DIGITA MESE SENZA LO ZERO]))
GROUP BY [CERT_PRES_LEZ_PRIMA FASE].ANASTUD,
[CERT_PRES_LEZ_PRIMA FASE].IDSTUD,
[CERT_PRES_LEZ_PRIMA FASE].COGNOME,
[CERT_PRES_LEZ_PRIMA FASE].DATA,
[CERT_PRES_LEZ_PRIMA FASE].NOME
ORDER BY MIN([CERT_PRES_LEZ_PRIMA FASE].[MATTINO INIZIO]);



Non ho capito il problema ma in questo modo sono riuscito anche a togliere una query!
Avatar utente
sbs
Utente Junior
 
Post: 96
Iscritto il: 18/09/10 11:25


Torna a Applicazioni Office Windows


Topic correlati a "[ACCESS 2010] PROBLEMA CON QUERY SU CAMPO ORA":

Problema Windows 10
Autore: asso1998
Forum: Software Windows
Risposte: 1

Chi c’è in linea

Visitano il forum: Francesco53 e 20 ospiti