[MYSQL] Estrarre tutti i record da una tabella con data inferiore a 5 mesi

di il
6 risposte

[MYSQL] Estrarre tutti i record da una tabella con data inferiore a 5 mesi

Ciao a tutti,
avrei la necessità di effettuare una select su una tabella andando ad estrarre tutti i record che hanno il campo data <= 5 mesi dalla data odierna.

Ho provato ad eseguire questa query

SELECT * FROM tabella WHERE YEAR(data) = YEAR(NOW()) AND MONTH(data)= MONTH(NOW()) and DAY(data) <= DAY(NOW()) GROUP BY targa LIMIT 100 
ottengo però tutti i record del mese in corso.

Mi dareste una mano a comprendere come strutturare la query.

Grazie come sempre.

6 Risposte

  • Re: [MYSQL] Estrarre tutti i record da una tabella con data inferiore a 5 mesi

    Per quel che vedo con quella query tiri fuori i primi 100 record del mese corrente minori di oggi

    sec me dovrebbe essere qualcosa di simile>

    SELECT * FROM tabella WHERE data <= NOW() - INTERVAL 5 month
  • Re: [MYSQL] Estrarre tutti i record da una tabella con data inferiore a 5 mesi

    yarendil ha scritto:


    Per quel che vedo con quella query tiri fuori i primi 100 record del mese corrente minori di oggi

    sec me dovrebbe essere qualcosa di simile>
    SELECT * FROM tabella WHERE data  <= NOW() - INTERVAL 5 month
    Buongiorno yarendil,
    anzitutto grazie infinite per la risposta,
    la query da te indicata è perfetta, ma secondo me ho sbagliato la logica dell'estrazione e ti spiego il perchè:

    Io ho una tabella con circa 8000 commesse, avrei la necessità di individuare tutti i clienti che hanno effettuato l'ultimo intervento
    5 mesi fa. Con la query che ho richiesto, ottengo effettivamente tutti i clienti che hanno effettuato l'ultimo intevento 5 mesi fa, ma se lo stesso cliente, quindi lo stesso numero di targa ha effettuato interventi successivamente, questi ultimi verrebbero esclusi dalla query e pertanto otterrei dei dati non in linea con la mia richiesta
    SELECT veicolo, targa, cliente, data FROM commesse WHERE data <= NOW() -INTERVAL 5 month GROUP by targa ORDER BY data DESC
  • Re: [MYSQL] Estrarre tutti i record da una tabella con data inferiore a 5 mesi

    areasviluppo ha scritto:


    ...ma se lo stesso cliente, quindi lo stesso numero di targa...
    Questo è concettualmente sbagliato. Uno stesso cliente potrebbe portarti più veicoli. Quindi non darei per scontata la corrispondenza 1-1. Infatti raggruppi per targa e non per cliente...

    areasviluppo ha scritto:


    ...questi ultimi verrebbero esclusi dalla query e pertanto otterrei dei dati non in linea con la mia richiesta...
    Non vedo come sia possibile, dato che nella WHERE non hai questo vincolo. La query prende tutti gli interventi più vecchi di cinque mesi.
    Se vuoi escludere le targhe che sono passate da te più recentemente, potresti annidare nella una select che tira fuori tutte le targhe che hanno un intervento negli ultimi 5 mesi e la sfrutti con un .
  • Re: [MYSQL] Estrarre tutti i record da una tabella con data inferiore a 5 mesi

    Provato a fare
    date = now()-interval 5 month
  • Re: [MYSQL] Estrarre tutti i record da una tabella con data inferiore a 5 mesi

    Sgrubak ha scritto:


    areasviluppo ha scritto:


    ...ma se lo stesso cliente, quindi lo stesso numero di targa...

    areasviluppo ha scritto:


    ...questi ultimi verrebbero esclusi dalla query e pertanto otterrei dei dati non in linea con la mia richiesta...
    Non vedo come sia possibile, dato che nella WHERE non hai questo vincolo. La query prende tutti gli interventi più vecchi di cinque mesi.
    Se vuoi escludere le targhe che sono passate da te più recentemente, potresti annidare nella una select che tira fuori tutte le targhe che hanno un intervento negli ultimi 5 mesi e la sfrutti con un .
    Non sono stato capace di implementare la "NOT IN" che a quanto pare serve. Lo dico perchè questa query
    
    SELECT veicolo AS Veicolo, targa AS Targa, cliente AS Cliente, tel AS Telefono, DATE_FORMAT(data,'%d/%m/%Y') AS 'Data Ultima Commessa', SUM(totale) AS 'Incasso', COUNT(*) AS 'Numero Interventi' FROM commesse WHERE data <= NOW()-INTERVAL 5 month GROUP by targa HAVING COUNT(*) >= 5 ORDER BY data ASC 
    
    mi seleziona gli interventi 5 mesi a ritroso, ma controllando ho verificato che le targhe estratte hanno effettuato interventi anche in date successive, pertanto l'estrazione non è veritiera.

    Potreste postarmi un esempio

    Grazie
  • Re: [MYSQL] Estrarre tutti i record da una tabella con data inferiore a 5 mesi

    areasviluppo ha scritto:


    Non sono stato capace di implementare la "NOT IN" che a quanto pare serve.
    Certo che serve, essendo una condizione che a te interessa.

    Dovrebbe diventare simile a:
    
    SELECT *
    FROM commesse
    WHERE data <= NOW()-INTERVAL 5 month
    	and targa NOT IN (query)
    
    Al posto di "query", inserisci un'istruzione SELECT che ritorna i valori distinti di tutte le targhe nella tabella commesse che hanno la data di intervento nel periodo di tuo interesse.
Devi accedere o registrarti per scrivere nel forum
6 risposte