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

    [MYSQL]Query suddivisa x giorni del mese

    Ciao,
    ho una serie di righe di un DB MySql e ogni riga ha una colonna che mi dice la data (in timestampunix) in cui è stata inserita la riga.

    esempio della tabella (per semplicità la Colonna_B è una data normale)

    Colonna_A | Colonna_B
    X | 01/01/09
    Y | 01/01/09
    X | 01/01/09
    X | 01/01/09
    Y | 02/01/09
    X | 03/01/09
    Y | 03/01/09
    Y | 03/01/09
    X | 03/01/09
    X | 03/01/09

    Devo fare un mini report che mi mostri gli ultimi 30 giorni il totale siddiviso per singolo giorni delle X e delle Y....potrei riuscirci con una sola query? :master:
    Luca Bottoni's World
    www.bottonisworld.com

  2. #2
    Luca Bottoni's World
    www.bottonisworld.com

  3. #3
    Utente di HTML.it L'avatar di clasku
    Registrato dal
    Aug 2006
    Messaggi
    3,197
    Ma una cosa tipo questa?

    codice:
    SELECT * FROM tabella 
    WHERE Colonna_B BETWEEN CURDATE() AND (CURDATE()-2592000) 
    GROUP BY Colonna_B
    ORDER BY Colonna_A, Colonna_B
    Non sono bravissimo con i campi data, magari ho scritto 'na ca.........

    Per la cronaca, prendila come uno spunto, non la posso provare

  4. #4
    così ad occhio però dovrei fare una query x ogni giorno mi sembra?
    Luca Bottoni's World
    www.bottonisworld.com

  5. #5
    Utente di HTML.it L'avatar di clasku
    Registrato dal
    Aug 2006
    Messaggi
    3,197
    No, prende tutti i valori della Colonna_B compresi tra la data di oggi e la data di 30 giorni fa (2592000 secondi in timestamp)

    Mi sono accorto ora che ho invertito i valori del between, devi metterli così

    codice:
    BETWEEN (CURDATE()-2592000) AND CURDATE()

  6. #6
    quello però non è un problema, il problema è la suddivisione poi in singoli giorni e mi chiedevo se in una query SQL unica potevo farlo..usando anche una stored ho una tabella temporanea..queste ultime 2 non le ho mai usate però
    Luca Bottoni's World
    www.bottonisworld.com

  7. #7
    Utente di HTML.it L'avatar di clasku
    Registrato dal
    Aug 2006
    Messaggi
    3,197
    La query che ti ho scritto io, se funziona , dovrebbe estrarre tutti i campi con data compresa tra oggi e 30 giorni fa, li raggruppa per data e poi li ordina per Colonna_A e data.

    Nella mia idea dovresti avere

    X 01/01/01
    Y 01/01/01
    Y 02/01/01
    X 03/01/01
    Y 03/01/01

    Se questo è il risultato che ti aspetti puoi anche mettere un campo che conta le ripetizioni di ogni singolo X o Y.

    Sempre se è questo quello che cerchi...

  8. #8
    si, però la colonna contenente il TimeStamp contiene anche i min, ore e secondi , quindi non so se nel group by posso fare un qualcosa che raggruppi si , ma in base a un dato tipo:

    GROUP BY date("dmY",Colonna_B)

    la funzione date l'ho presa dal php, perchè non ricordo quella sql adesso, però il senso è raggruppare per una colonna che contiene non solo la data , ma anche gli orari però non deve considerare gli orari..non so se sono riuscito a spiegarmi?
    Luca Bottoni's World
    www.bottonisworld.com

  9. #9
    Utente di HTML.it L'avatar di clasku
    Registrato dal
    Aug 2006
    Messaggi
    3,197
    Credo ci sia un modo per formattare l'output dei campi da MYSQL... ma sinceramente non me lo ricordo...

    Provaa cercare sul manuale o sul sito html.it. Ad esempio, clicca

  10. #10
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,923
    Vedi se così va bene.

    codice:
    select miadata,
    max(case when colonna_a = 'x' then quanti else 0 end) as totale_x,
    max(case when colonna_a = 'y' then quanti else 0 end) as totale_y
    from (
    select colonna_a,
    from_unixtime(colonna_b,"%Y-%m-%d") as miadata,
    count(colonna_a) as quanti
    from nome_tabella
    where datediff(now(),from_unixtime(colonna_b,"%Y-%m-%d")) < 30
    group by colonna_a,miadata
    ) as tab
    group by miadata
    order by miadata desc
    edit. Non mi è ben chiaro se la data sia uno unix timestamp o un semplice datetime.
    Nel caso sia un datetime

    codice:
    select miadata,
    max(case when colonna_a = 'x' then quanti else 0 end) as totale_x,
    max(case when colonna_a = 'y' then quanti else 0 end) as totale_y
    from (
    select colonna_a,
    date_format(colonna_b,"%Y-%m-%d") as miadata,
    count(colonna_a) as quanti
    from nome_tabella
    where datediff(curdate(),date_format(colonna_b,"%Y-%m-%d")) < 30
    group by colonna_a,miadata
    ) as tab
    group by miadata
    order by miadata desc

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