Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it L'avatar di nman
    Registrato dal
    Jan 2011
    residenza
    Milano
    Messaggi
    1,333

    [MySql - MSSql - Access] Un esempio di Query ricorrente

    Ciao ragazzi.
    Prendendo spunto da alcuni recenti treads
    ( nonche da tante query fatte con soluzioni di ripiego )
    vorrei porre una domanda non legata a uno specifico problema
    bensi legata all' esperienza che ci servirą nel cammino.

    Ho una tabella chiamata "statistiche" con 3 campi:

    __statistiche
    ________mese____testo
    ________vend____int
    ________agen____testo

    Vorrei CON 1 SOLA QUERY avere
    raggruppato per "mese"
    il valore Max di "vend"
    e il nome di "agen" che ha effettuato la vendita massima
    __________________________________________________ _____________

    In pratica se ho la tabella "statistiche" cosi fatta
    codice:
    __mese______vend_____agen
    __________________________
    ____ge________12_____marco
    ____ge________21_____anna
    ____ge________14_____roby
    ____ge________36_____marco
    ____fe________88_____anna
    ____fe________52_____roby
    ____fe________12_____marco
    ____fe________14_____anna
    ____ma________37_____roby
    ____ma________84_____marco
    ____ma________53_____anna
    ____ma________41_____roby
    ____ma________29_____marco
    Voglio estrarre
    codice:
    ____ge________36_____marco
    ____fe________88_____anna
    ____ma________84_____marco
    Ripeto. Con una sola qyery ( perche con 2 č roba normale )





    Grazie

  2. #2
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    codice:
    select s1.* from statistiche as s1
    inner join ( 
    select mese, max(vend) as maggiore
    from statistiche
    group by mese) as s2
    on s1.mese = s2.mese and s1.vend = s2.maggiore


    edit. Ah, con mssql puoi anche sfruttare le funzioni analitiche e le cte

    codice:
    with cte as 
    (
    select *,
    ROW_NUMBER() over(partition by mese order by vend desc) as rownum
    from statistiche
    )
    
    select * from cte where rownum = 1

  3. #3
    Utente di HTML.it L'avatar di nman
    Registrato dal
    Jan 2011
    residenza
    Milano
    Messaggi
    1,333
    Perfetto in pochi minuti
    Io ci ho perso la testa per delle settimane


    Assomiglia tantissimo a quello che facevo io in 2 salti

    tu hai messo tutto insieme Ma come hai fatto?


  4. #4
    Utente di HTML.it L'avatar di nman
    Registrato dal
    Jan 2011
    residenza
    Milano
    Messaggi
    1,333
    Scusatemi se ritorno sull'argomento che sembrava chiuso.

    La query " nidificata " proposta da Nicola che ha funzionato
    perfettamente e al primo colpo su MSSQL e Access

    Non vuole funzionare invece su MySQL

    __________________________________________________ ______________

    Confesso che č meno di un mese che sto " testando " MySql
    percio temo che mi sto perdendo in un bicchier d'acqua

    oppure manca qualcosa al mio MySql per la gestione
    delle query nidificate______( sņ che il buon Nicola non sbaglia )_____

    Tantopiu che ho la sensazione che la query in questione č stata
    costruita e testata proprio con MySql
    __________________________________________________ _____________

    Mi da questi errori:
    codice:
    MySQL Error n°  1349
    View's SELECT contains a subquery in the FROM caluse
    codice:
    MySQL Error n°  1064
    You have an error in your SQL syntax;  chech the manual 
    that corrisponds to your MySql server
    version for the right syntax to use near " at line 1
    Io uso su WindowsServer2008
    ___ MySQL Administrator 1.2.17
    ___ MySQL QueryBrowster 1.2.17
    ___ MySql Workbench 5.2.33 CE


    Grazie

    PS. Aggiungo che ho provato a fare altre query " nidificate "
    ( quelle con dentro la subquery ) e ottengo sempre lo stesso errore

  5. #5
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    La query in sč immagino non ti dia problemi ma li hai quando cerchi di inserirla all'interno di una vista ottenendo l'errore 1349.

    Prova a ricorrere a questo escamotage:

    codice:
    create view vista_mese as
    select mese, max(vend) as maggiore
    from statistiche
    group by mese;
    
    create view vista as 
    select s.* from statistiche as s
    inner join vista_mese as v
    on s.mese = v.mese and s.vend = v.maggiore;
    
    select * from vista;
    Originariamente inviato da nman
    ( sņ che il buon Nicola non sbaglia )_____
    Questa poi.

  6. #6
    Utente di HTML.it L'avatar di nman
    Registrato dal
    Jan 2011
    residenza
    Milano
    Messaggi
    1,333
    Si questo funziona bene.

    Pero ha generato 2 viste distinte ( vista_mese e vista )

    Vuoi dirmi che con MySql non posso
    accorpare vuelle 2 viste in una sola ???


  7. #7
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    Originariamente inviato da nman
    Si questo funziona bene.

    Pero ha generato 2 viste distinte ( vista_mese e vista )

    Vuoi dirmi che con MySql non posso
    accorpare vuelle 2 viste in una sola ???

    Dal manuale

    http://dev.mysql.com/doc/refman/5.0/en/create-view.html

    A view definition is subject to the following restrictions:
    * The SELECT statement cannot contain a subquery in the FROM clause.
    * The SELECT statement cannot refer to system or user variables.
    Quindi devi per forza trasformare la subquery in una vista a sč stante.

  8. #8
    Utente di HTML.it L'avatar di nman
    Registrato dal
    Jan 2011
    residenza
    Milano
    Messaggi
    1,333
    MySQL ha perso 3 punti nel mio gradimento


  9. #9
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    Originariamente inviato da nman
    MySQL ha perso 3 punti nel mio gradimento


    beh, dai, comunque la soluzione c'č.

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 © 2026 vBulletin Solutions, Inc. All rights reserved.