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

    [MySQL] filtrare record in un range di date

    Ciao a tutti, la seguente query mi conteggia il numero di eventi di ogni utente, anche se di eventi non ve ne sono; ottengo quindi:
    Codice PHP:
    utente1    1
    utente2    0
    utente3    0
    utente4    2
    utente5    0
    ... 
    se provo ad aggiungere "WHERE data_evento BETWEEN @data_da AND @data_a", ottengo solo i record che effettivamente hanno un evento da cui pescare la data:
    Codice PHP:
    utente1    1
    utente4    2
    ... 

    Come posso risolvere? La query è:
    codice:
    SET @data_da = '2019-01-01';
    SET @data_a = '2019-01-31';
    
    
    SELECT
        utente.cod.utente,
        COUNT(eventi.id_utente) AS conta
    FROM utenti
    LEFT JOIN eventi ON eventi.id_utente = utenti.id
    GROUP BY utenti.id, utenti.cod_utente
    ORDER BY utenti.cod_utente;

    Grazie mille

  2. #2
    Utente di HTML.it L'avatar di nman
    Registrato dal
    Jan 2011
    residenza
    Milano
    Messaggi
    1,294
    Quote Originariamente inviata da magic_key Visualizza il messaggio
    ....... ottengo solo i record che effettivamente hanno un evento da cui pescare la data: ........
    Ovviamente se non hai la data non lo puo pescare ........
    La soluzione in linea generale è questa:
    .......... WHERE ( (..............) OR (data_evento IsNull) ) ......
    poi la devi adattare al tuo contesto

    .
    Ultima modifica di nman; 15-03-2019 a 07:45

  3. #3
    Grazie per la risposta.. già provato ma in questo modo ignora il range di date..
    Quote Originariamente inviata da nman Visualizza il messaggio
    Ovviamente se non hai la data non lo puo pescare .......

    Appunto se non la trova vorrei restituisse un bel zero...

  4. #4
    puoi per piacere postare la query con la WHERE e l'ouput che ottieni? grazie

  5. #5
    Con BETWEEN:
    codice:
    SET @data_da = '2019-01-01';
    SET @data_a = '2019-01-31';
    
    
    SELECT
        utente.cod.utente,
        COUNT(eventi.id_utente) AS conta
    FROM utenti
    LEFT JOIN eventi ON eventi.id_utente = utenti.id
    WHERE eventi.data_evento BETWEEN @data_da AND @data_a
    GROUP BY utenti.id, utenti.cod_utente
    ORDER BY utenti.cod_utente;

    Ottengo:
    codice:
    utente1    1
    utente4    2
    ...

    Senza BETWEEN:
    codice:
    SET @data_da = '2019-01-01';
    SET @data_a = '2019-01-31';
    
    
    SELECT
        utente.cod.utente,
        COUNT(eventi.id_utente) AS conta
    FROM utenti
    LEFT JOIN eventi ON eventi.id_utente = utenti.id
    GROUP BY utenti.id, utenti.cod_utente
    ORDER BY utenti.cod_utente;

    Ottengo:
    codice:
    utente1    1
    utente2    0
    utente3    0
    utente4    2
    utente5    0
    ...

  6. #6
    puoi provare la query sotto?

    SELECT
    utente.cod.utente,
    COUNT(eventi.id_utente) AS conta
    FROM utenti
    LEFT JOIN eventi ON eventi.id_utente = utenti.id AND eventi.data_evento BETWEEN @data_da AND @data_a
    GROUP BY utenti.id, utenti.cod_utente
    ORDER BY utenti.cod_utente;

  7. #7
    Grazie per la risposta, ma ottengo tutti gli utenti ma con zero a tutti, anche provando altre date:

    codice:
    utente1    0
    utente2    0
    utente3    0
    utente4    0
    utente5    0
    ...

  8. #8
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,351
    Forse cosi.

    codice:
    SELECT U.id_utente, CASE WHEN A.conta IS NULL THEN 0 ELSE A.conta END
    FROM utenti U
    LEFT JOIN 
    (
     SELECT eventi.id_utente, count(*) AS conta
     FROM eventi 
     WHERE eventi.data_evento BETWEEN @data_da AND @data_a 
     GROUP BY eventi.id_utente 
    ) A ON A.id_utente = U.id_utente
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

  9. #9
    Nulla.. anche in questo caso funziona solo se levo il BETWEEN...

  10. #10
    molto strano. l'unica cosa che potrebbe influire (ma forse forse forse) è l'ultima riga, doce invertirei gli operatori

    ) A ON U.id_utente = A.id_utente

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