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

    [MySql] rilevare data minore

    Dunque, sto cercando di mettere in piedi una query che dovrebbe etrarre da una tabella, determinati dati (irrilevanti nel problema), solo se, la data è la prima data di una serie in ordine cronologico appartenente allo stesso gruppo e questo il giorno prima.

    Esempio pratico:

    Mettiamo di avere nella tabella uan cosa del tipo

    ID - DATA - GRUPPO

    1 - 2010-10-03 - 1
    2 - 2010-10-04 - 1
    3 - 2010-10-03 - 2
    4 - 2010-10-05 - 2
    5 - 2010-10-05 - 1
    6 - 2010-10-06 - 2


    Nel caso specifico dovrebbe estrarre nella data 2010-10-02 i record 1 e 3 appartenenti rispettivamente uno al gruppo 1 e uno al gruppo 2.
    Il giorni sucessivi non dovrebbe estrarre nulla perchè le date sucessive non sono le prime in ordine cronologico.

    Ora, per estrarre la data di domani rispetto ad oggi non ci sono problemi, mi manca il resto

    Spero di essermi spiegato

    Grazie

    SK

  2. #2
    Utente di HTML.it L'avatar di Mashin
    Registrato dal
    Jul 2010
    Messaggi
    187
    Ma la tabella e' ordinata per data o per Gruppo ?

    nell'esempio non si capisce.

    Quindi io passo la data alla query e questa mi deve restituire, per ogni gruppo, il record avente come data la prima, in ordine cronologico, maggiore della data parametro in ingresso?

  3. #3
    Utente di HTML.it L'avatar di Mashin
    Registrato dal
    Jul 2010
    Messaggi
    187
    Prova cosi'

    codice:
    	select 
    		GRUPPO, 
    		min(DATA) 
    	from
    		Tabella	
    	where 
    		DATA> <<data_parametro>>
    	group by
    		GRUPPO;

  4. #4
    Originariamente inviato da Mashin
    Ma la tabella e' ordinata per data o per Gruppo ?

    nell'esempio non si capisce.

    Quindi io passo la data alla query e questa mi deve restituire, per ogni gruppo, il record avente come data la prima, in ordine cronologico, maggiore della data parametro in ingresso?
    Ciao e grazie,

    la tabella non è ordinata in nessun modo, i dati vengono inseriti e accodati nella tabella, quindi all'interno della tabella non hanno nessun ordine preciso.

    La data che dovrei passare alla query, in realtà è il giorno dopo ad oggi ovvero

    NOW() + INTERVAL 1 DAY

    Questo tramite cronjob avverrà ogni giorno, una volta al giorno.

  5. #5
    Utente di HTML.it L'avatar di Mashin
    Registrato dal
    Jul 2010
    Messaggi
    187
    La query che ti ho postato come ti pare? Ovviamente nella where ci metti la data_parametro valorizzata come meglio credi.

  6. #6
    Originariamente inviato da Mashin
    La query che ti ho postato come ti pare? Ovviamente nella where ci metti la data_parametro valorizzata come meglio credi.
    è simile alla mia

    codice:
    SELECT
    MIN( sottoeventi_personale.data_sottoevento ) AS data_minore,
    sottoeventi_personale.id_sottoevento,
    sottoeventi_personale.id_personale
    
    FROM sottoeventi_personale
    
    WHERE sottoeventi_personale.data_sottoevento = NOW() + INTERVAL 1 DAY
    
    AND sottoeventi_personale.id_personale<>0
    
    GROUP BY sottoeventi_personale.id_sottoevento
    Dove id_sottoevento è il gruppo di appartenenza, ma prende in considerazione anche le date che non sono le prime di ogni gruppo

  7. #7
    Utente di HTML.it L'avatar di Mashin
    Registrato dal
    Jul 2010
    Messaggi
    187
    Ma perche' metti data uguale a domani ?

    Non e' piu' attinente alle tue specifiche un bel maggiore di oggi? Tanto poi fai la min e ti restituisce la prima. Non volevi la prima in lista successiva a oggi ?

    Credo che il problema sia che tu scegli anche l'id. Se lasci nella select solo la MIN e l'ID per cui fai la group by funziona ?

  8. #8
    Originariamente inviato da Mashin
    Ma perche' metti data uguale a domani ?

    Non e' piu' attinente alle tue specifiche un bel maggiore di oggi? Tanto poi fai la min e ti restituisce la prima. Non volevi la prima in lista successiva a oggi ?

    Credo che il problema sia che tu scegli anche l'id. Se lasci nella select solo la MIN e l'ID per cui fai la group by funziona ?
    Si puo' andar bene anche come dici tu, ma il fatto è che comunque prende in considerazione anche le altre date, mi spiego, se nella tabella ci sono 10 gruppi che hanno 3 date per esempio:
    2010-10-20
    2010-10-21
    2010-10-22
    se eseguita oggi, trova tutte le date 2010-10-20 di tutti i 10 gruppi, ma se la eseguo come se oggi fosse domani........tira fuori comunque 2010-10-21 e non va bene, non dovrebbe tirare fuori proprio niente per che non è la data minore di nessuno dei 10 gruppi.

  9. #9
    Utente di HTML.it L'avatar di Mashin
    Registrato dal
    Jul 2010
    Messaggi
    187
    aspetta temo di essermi perso un passaggio.

    Fissiamo i criteri. Tu vuoi che estragga la prima data (in senso cronologico) successiva alla data di lancio query?

    Riprendo il tuo esempio di 5 gruppi con date
    2010-10-20
    2010-10-21
    2010-10-22

    Se la lanci oggi dovrebbe tirar fuori, per ogni gruppo, SOLO il record con data 2010-10-20
    Se la lancio domani dovrebbe tirar fuori il record con data 2010-10-21 (e solo questo. Non le successive).

    Se pero' avessi date

    2010-10-19
    2010-10-24
    2010-10-28

    e lancio in data odierna mi tira fuori 2010-10-24. Lanciato in data domani ancora 2010-10-24 e via dicendo finche' non arrivo al 24, giorno in cui la query restituisce record con data 2010-10-28

    E' corretto ?

    Ovviamente se devo simulare il lancio di oggi faro' Data > Now().
    Se simulo il lancio a domani usero' Data > Now() +1 e via dicendo.

    Altro punto. L'Id della riga (sottoeventi_personale.id_personale) lo devi estrarre ? perche' se NO lo devi levare come campo di select senno' non funziona la query. Se si devi usare 1 altra query piu' complessa. Una coas tipo

    codice:
    	select 
    		tab1.a,
    		tab1.b,
    		tab1.c
    	from
    		tab1 join
    		(
    		select 
    			a,
    			min(b) as min
    		from
    			tab1
    		where 
    			b> now()
    		group by
    			a) as tab2 on tab1.a=tab2.a
    			          and tab1.b=tab2.min;
    a,b,c son rispettivamente per te id_sottoevento, data_sottoevento, id_personale

  10. #10
    Originariamente inviato da Mashin
    aspetta temo di essermi perso un passaggio.

    Fissiamo i criteri. Tu vuoi che estragga la prima data (in senso cronologico) successiva alla data di lancio query?

    Riprendo il tuo esempio di 5 gruppi con date
    2010-10-20
    2010-10-21
    2010-10-22

    Se la lanci oggi dovrebbe tirar fuori, per ogni gruppo, SOLO il record con data 2010-10-20
    Se la lancio domani dovrebbe tirar fuori il record con data 2010-10-21 (e solo questo. Non le successive).

    Se pero' avessi date

    2010-10-19
    2010-10-24
    2010-10-28

    e lancio in data odierna mi tira fuori 2010-10-24. Lanciato in data domani ancora 2010-10-24 e via dicendo finche' non arrivo al 24, giorno in cui la query restituisce record con data 2010-10-28

    E' corretto ?
    No non è corretto....

    Cerco di spiegarmi meglio.
    Prendiamo sempre le nostre date
    2010-10-20
    2010-10-21
    2010-10-22

    Lanciato oggi deve tirare fuori per qualsiasi gruppo che contiene come prima data (e come data intendo quella di domani) in ordine cronologico, quindi 2010-10-20, doamani e nei giorni a seguire non deve proprio più tirare fuori nulla, mai.
    Nel secondo range di date che hai messo
    2010-10-19
    2010-10-24
    2010-10-28
    Se lanciata oggi non deve tirare fuori niente, mai, avrebbe dovuto tirare fuori ieri tutte le date che sono le prime di ogni gruppo che contiene 2010-10-19 come data.
    Inoltre, ovviamente, se la data 2010-10-19 fosse stata la seconda in ordine cronologico di un qualsiasi gruppo, ovviamente non doveva essere presa in considerazione, perchè non è la prima.

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.