DATEDIFF di diversi eventi..

domenica 25 gennaio 2015 - 19.37

albi Profilo | Newbie

Ciao a tutti,
sono nuovo e nuovo di programmazione su mysql..
e, ho un problema da risolvere.

Ho già creato parte dello script ma mi manca un pezzo di formula, che non so come impostare.
VI dico...

Poniamo di avere una tabella che ha diversi eventi che x comodità chiamiamo evento VERDE, ROSSO e GIALLO.
ognuno di questi eventi ha una data di Creazione e di Chiusura.
Ho calcolato con il datediff la differenza in giorni.
Ora però devo dirgli di distinguermeli con un qualche segnale.

Ho pensato ad una sorta di comando IF.. che nella logica dovrebbe funzionare così:
IF datediff VERDE <= 5, 'In time', 'Out Time'
IF datediff ROSSO <=7, 'In time', 'Out Time'
IF datediff GIALLO <= "data di creazione", 'In Time', 'out time'.

In sostanza, non so come dirgli di fare riferimento all'evento.
L'evento data di creazione e di chiusura sono due select della tabella d'origine.

SELECT
.creazione
.chiusura
al momento sono arrivato a questo:

DATEDIFF(chiusura,creazione) AS DAYDIFF,
if(datediff(chiusura,creazione)<= 5, 'InTime', 'OutTime'),

Ovviamente il risultato mi da la differenza sia x gli eventi VERDI che ROSSI che GIALLI con lo stesso parametro.. (<=5)
ma non so come dirgli che i tre colori, hanno scadenze diverse.

:)

Qualche suggerimento?

Grazie..
Albi

renarig Profilo | Expert

>sono nuovo ..... su mysql..

>chiamiamo evento VERDE, ROSSO e GIALLO.

>IF datediff VERDE <= 5, 'In time', 'Out Time'
>IF datediff ROSSO <=7, 'In time', 'Out Time'
>IF datediff GIALLO <= "data di creazione", 'In Time', 'out Time'.
>
>SELECT
>.creazione
>.chiusura
>al momento sono arrivato a questo:
>
>DATEDIFF(chiusura,creazione) AS DAYDIFF,
>if(datediff(chiusura,creazione)<= 5, 'InTime', 'OutTime'),
>
>Ovviamente il risultato mi da la differenza sia x gli eventi
>VERDI che ROSSI che GIALLI con lo stesso parametro.. (<=5)
>ma non so come dirgli che i tre colori, hanno scadenze diverse.
>
Non conosco MySql ma lo schema a blocchi potrebbe esssere questo:

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

per essere più chiari, quella riga che ho chiamato "LimiteTemporale"
è una formula che trasforma il
Verde in 5
Rosso in 7
Giallo in 0
che dovrai buttare giu nella miglior sintassi MySql

Mentre nella ultima riga ( InOut ) al posto del banale "LimoteTemporale"
che ho messo io per semplicita, dovrai metterci ( mi sa ) la corrispondente formula


Non so se ho centrato la domanda
facci sapere

.

boccia75 Profilo | Junior Member

Ciao!
Io farei in questo modo:


SELECT
.creazione,
.chiusura,
case when evento='Verde' then if(datediff(chiusura,creazione)<= 5, 'InTime', 'OutTime')
when evento='Rosso' then if(datediff(chiusura,creazione)<= 7, 'InTime', 'OutTime')
when evento='Giallo' then .....
end
from tuatabella;

Facci sapere se hai risolto.
Ciao!

albi Profilo | Newbie

Ciao a tutti,
e sopratutto grazie per le vostre immediate risposte.
Non sono riuscito a ringraziarvi prima, perchè per colpa di MySQL, non sto più dormendo la notte,
e ho ancora molte cose da fare.

Ho risolto!!
In verità ho risolto molto comodamente con un CASE WHEN..
ho elencato le diverse variabili e come comportarsi in caso di una o l'altra ipotesi, e... ho risolto.
Quindi vi ringrazio perchè comunque prima di leggerlo qui da voi, non avrei nemmeno immaginato che comando dare!! :)

...ehehe..ma non finisce qui..
ora si pone un problema legato alle date.

Di questa serie di eventi, alcuni doppi, mi serve prendere l'ultimo + recente.
Ho visto che esiste la funzione DESC LIMIT

Quindi, vi spiego con esempio..
Data una tabella, con diversi eventi, alcuni ripetuti, mi serve prendere l'ultimo cronologico.

Evento VERDE data Inserimento 22/10/2014
Evento VERDE data Inserimento 10/01/2014
Evento VERDE data Inserimento 07/11/2014
Evento VERDE data Inserimento 02/07/2014
Evento VERDE data Inserimento 26/03/2014...

ecco.. devo prendere quello + recente.
Il risultato dovrebbe darmi quindi, Evento Verde con data inserimento, 07/11/2014.

Ehm.. confido in voi oramai..

Grazie ancora.
Albi



boccia75 Profilo | Junior Member

Ciao!
Alla luce di ciò che hai descritto la soluzione migliore, secondo me, è quella di avere una tabella parallela contenente l'ultimo record per ogni evento.
Questa tabella dovrebbe aggiornarsi ad ogni aggiornamento della tabella principale.
Ciao

albi Profilo | Newbie

Questa tabella non è disponibile.
Abbiamo una tabella contenente una serie di dati relativi a clienti... dall'inserimento del contratto, all'attivazione della linea.
Ogni fase del processo è tracciato con un nome diverso.. di questi.. mi serve selezionare di ogni cliente, l'ultimo in corso, quello più recente.
Diciamo la fase del processo attiva al momento.
Se non faccio alcuna selezione di partenza, il risultato della query mi fa vedere la lista dei clienti, alcuni ripetuti diverse decine di volte, perchè
mi fa vedere ogni fase. (data di inizio-data di fine).
Mi serve individuare l'ultima in corso, per ogni cliente.
Tipo:
Account Cliente1 - Momento del processo1 - data di inizio processo.
Account Cliente1 - Momento del processo2 - data di inizio processo.
Account Cliente1 - Momento del processo3 - data di inizio processo.
Account Cliente2 - Momento del processo1 - data di inizio processo.
Account Cliente2 - Momento del processo2 - data di inizio processo.
Account Cliente2 - Momento del processo3 - data di inizio processo.
Account Cliente2 - Momento del processo4 - data di inizio processo.
e così via dicendo per svariati "momenti del processo" (a cui è assegnato un nome) e per centinaia di clienti.
Quello che mi serve è beccare dei clienti 1,2,3 ...
l'ultimo in esecuzione, facendo riferimento alla data di inizio processo.
QUindi..
per il cliente 1, il processo3
per il cliente 2, il processo4

Non posso selezionarli dal nome del processo, ma dalla data di inizio del processo, prendendo l'ultimo cronologico.

Non so se mi sono spiegato. :|
Nella mia ignoranza, ho provato a mettere un desc limit 1, ma.. mi prende di tutti i clienti, l'ultimo in corso.
Quindi, tra centinaia di clienti, me ne trova solo 1, col processo + recente! :(

uhm...
Help! :|




Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5