Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 16
  1. #1

    Problemi con la ricerca di date e il raggruppamento in SQL

    Scusatemi non vorrei essere off topic ma non riesco ad avere una risposta al mio questo in altri forum.

    il mio problema è questo:

    ho un database access al quale accedo con uno script ASP. Nell'archivio magazzino è inserita la data e l'ora (formato data e ora) dell'inserimento del record (cioè del prodotto nel magazzino).

    Voglio creare una pagina che mi dica che in data gg/mm/aaaa c'è stato un aggiornamento, mentre in g1/m1/aaa1 c'è stato un altro aggiornamento ecc. Cioà gli ultimi N aggiornamenti.

    Ho subito pensato ad una SELECT DISTINCT ma essendoci anche l'ora, non mi fornisce raggruppamenti in quanto non ci sono due date e ore uguali.

    Avendo il campo con la data = DATAINSER nella tabella AUTO ho provato con:
    SELECT DataInser FROM auto ORDER BY DataInser DESC

    che mi restituisce:
    05/02/2007 21.28.14
    05/02/2007 21.26.47
    05/02/2007 21.26.02
    05/02/2007 21.25.26
    05/02/2007 21.24.40
    05/02/2007 21.15.44
    . . .
    . . .
    . . .
    05/02/2007 18.46.05
    20/11/2006 20.32.21
    20/11/2006 20.30.12
    20/11/2006 20.28.34
    20/11/2006 20.25.11ecc.

    Il passo successivo è stato estrapolare la sola data:
    SELECT LEFT(Expr0, 10) FROM(SELECT DataInser AS expr0 FROM auto ORDER BY DataInser DESC)

    che mi restituisce:
    05/02/2007
    05/02/2007
    05/02/2007
    05/02/2007
    05/02/2007
    05/02/2007
    . . .
    . . .
    . . .
    05/02/2007
    20/11/2006
    20/11/2006
    20/11/2006
    20/11/2006 ecc.

    Se voglio però raggruppare le date in modo che per ogni data me ne mostri una sola,
    sia che provi con Dinstinct direttamente
    SELECT DISTINCT LEFT(Expr0, 10) FROM(SELECT DataInser AS expr0 FROM auto ORDER BY DataInser DESC)
    sia che usi:
    SELECT DISTINCT expr1 FROM (SELECT LEFT(Expr0, 10) as Expr1 FROM(SELECT DataInser AS expr0 FROM auto ORDER BY DataInser DESC))
    oppure
    SELECT expr1 FROM (SELECT LEFT(Expr0, 10) as Expr1 FROM(SELECT DataInser AS expr0 FROM auto ORDER BY DataInser DESC)) GROUP BY Expr1

    mi restituiscono in tutti i casi
    01/04/2003
    01/09/2005
    01/12/2003
    02/06/2006
    02/08/2006
    02/09/2005
    03/05/2005
    03/08/2006
    03/11/2004
    04/04/2003
    04/09/2006
    05/01/2005
    05/02/2007
    05/03/2003
    05/07/2005
    06/01/2004
    06/03/2003
    06/03/2004
    06/03/2006
    06/07/2005
    07/03/2006
    09/07/2004
    09/10/2003
    10/06/2003
    12/11/2005
    14/05/2003
    14/11/2005
    15/05/2003
    16/01/2006
    17/04/2003
    18/05/2004 Rigorosamente ordinati per giorno, mese e anno, con priorità sull'ordinamento precedente.

    Mi chiedevo dove sbagliavo e perchè la disttinct cambia l'ordinamento precedentemente impostato.

    Se qualcuno fosse in grado di aiutarmi, sarei molto grato.
    Lux

  2. #2
    devi riformattarti la data come AAAAMMGG, poi la puoi riordinare

  3. #3
    Si, e questa è la soluzione che avevo trovato da fare in ASP.

    Mi chiedevo però se c'è un modo per riformattare il campo direttamente da SQL in modo da avere un RS già pronto.

    N on capisco poi perchè Distinct mi cambia l'ordinamento già giusto del RS.

    Grazie
    Lux

  4. #4
    certo. nell'istruzione sql puoi usare i vari left, mid, right, ecc

  5. #5
    il problema è che non o come concatenare tra loro i mid. Ho provato con:
    (RIGHT(expr1 , 4)" & "/" & "Mid(expr1 , 3,2)" & "/" & "LEFT(expr1 , 2))

    inserendolo in questo modo:
    SELECT (RIGHT(expr1 , 4)" & "/" & "Mid(expr1 , 3,2)" & "/" & "LEFT(expr1 , 2))
    AS Expr2 FROM (SELECT LEFT(Expr0, 10) as Expr1 FROM(SELECT DataInser AS expr0 FROM auto ORDER BY DataInser DESC)) GROUP BY Expr1

    ma non funziona. Dove sbaglio?

    Grazie
    Lux

  6. #6
    che vuol dire "non funziona"?

  7. #7
    codice:
    Mid(expr1 , 5,2)

  8. #8
    vuol dire che mi da un errore come se non accettasse più MID, LEN e RIGHT insieme.

    L'errore è:
    Error

    SQL-query :

    SELECT (RIGHT(expr1 , 4)"

    Microsoft JET Database Engine said:


    Syntax error in string in query expression '(RIGHT(expr1 , 4)"'.
    Lux

  9. #9
    hai messo una caterva di virgolette doppie che non servono

  10. #10
    Se lo metto così:
    SELECT (RIGHT(expr1 , 4) & "/" & Mid(expr1 , 3,2) & "/" & LEFT(expr1 , 2)) AS Expr2 FROM (SELECT LEFT(Expr0, 10) as Expr1 FROM(SELECT DataInser AS expr0 FROM auto ORDER BY DataInser DESC)) GROUP BY Expr1

    mi da questo errore:
    Error

    SQL-query :

    SELECT (RIGHT(expr1 , 4)

    Microsoft JET Database Engine said:


    Missing ), ], or Item in query expression '(RIGHT(expr1 , 4)'.


    invece se lo metto così:
    SELECT (RIGHT(expr1 , 4) & / & Mid(expr1 , 3,2) & / & LEFT(expr1 , 2)) AS Expr2 FROM (SELECT LEFT(Expr0, 10) as Expr1 FROM(SELECT DataInser AS expr0 FROM auto ORDER BY DataInser DESC)) GROUP BY Expr1

    Mi da questo errore:
    SQL-query :

    SELECT (RIGHT(expr1 , 4)

    Microsoft JET Database Engine said:


    Missing ), ], or Item in query expression '(RIGHT(expr1 , 4)'.


    Infine, se faccio a meno delle barre e scrivo così:
    SELECT (RIGHT(expr1 , 4) & Mid(expr1 , 3,2) & LEFT(expr1 , 2)) AS Expr2 FROM (SELECT LEFT(Expr0, 10) as Expr1 FROM(SELECT DataInser AS expr0 FROM auto ORDER BY DataInser DESC)) GROUP BY Expr1

    Mi continua a dare questo errore:
    SQL-query :

    SELECT (RIGHT(expr1 , 4)

    Microsoft JET Database Engine said:


    Missing ), ], or Item in query expression '(RIGHT(expr1 , 4)'.


    Qualcosa mi fa pensare che ci sia qualcosa di errato in RIGHT.

    Però, se levo la parentesi
    SELECT RIGHT(expr1 , 4) & Mid(expr1 , 3,2) & LEFT(expr1 , 2)) AS Expr2 FROM (SELECT LEFT(Expr0, 10) as Expr1 FROM(SELECT DataInser AS expr0 FROM auto ORDER BY DataInser DESC) GROUP BY Expr1

    continua imperterrito a dirmi che non va bene:
    Error

    SQL-query :

    SELECT RIGHT(expr1 , 4)

    Microsoft JET Database Engine said:


    No value given for one or more required parameters.


    Non capisco dove sbaglio in quanto su internet non riesco a trovare esempi che usino RIGHT, LEN e MID insieme in una istruzione SQL. Ho visto che la e commerciale & serve per concatenare, ma non so se va bene. Ho anche provato a sostituirla con AND ma nulla.

    Sono alla disperazione e ti ringrazio per darmi una mano.
    Lux

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.