Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 26
  1. #1
    Utente di HTML.it L'avatar di ubbicom
    Registrato dal
    Mar 2004
    Messaggi
    1,407

    Esclusione record esistenti

    Ciao a tutti.

    Vi spiego il problema: eseguo questa query per controllare in una tabella mysql se esiste già questo record:

    codice:
    SELECT * FROM 
    TABELLA
    WHERE 
    DATA = '2008-06-21' 
    AND ORA = '03:03:10'
    Dovrei, però, controllare anche che non ci siano record uguali, ma con un' ora in più rispetto all'orario, cioè se esistono nella tabella :

    ID = 1
    DATA = '2008-06-21'
    ORA = '03:03:10'

    ID = 2
    DATA = '2008-06-21'
    ORA = '03:33:10'

    ID = 3
    DATA = '2008-06-21'
    ORA = '04:03:10'

    Non devo prendere in considerazione i record con ID 2 ed ID 3 ( perchè rientrano nell'arco di un'ora rispetto all'orario di partenza 03:03:10 ) , ma solo quello con ID 1, cioè quello con la ora più vecchia ... come faccio?

    Grazie-

  2. #2
    Non riesco a capire cosa chiedi.

    Quella query NON ricava i dati di ID2 e ID3.
    E tu NON vuoi ID2 e ID3...

    Qual'è il problema?

    Comunque se ho capito la tipologia di problema ti suggerisco la DATEADD() di SQL.

  3. #3
    Utente di HTML.it L'avatar di ubbicom
    Registrato dal
    Mar 2004
    Messaggi
    1,407
    Originariamente inviato da pictor
    Non riesco a capire cosa chiedi.

    Quella query NON ricava i dati di ID2 e ID3.
    E tu NON vuoi ID2 e ID3...

    Qual'è il problema?

    Comunque se ho capito la tipologia di problema ti suggerisco la DATEADD() di SQL.
    La query è un esempio di come funziona adesso lo script e devo modificarla secondo la nuova esigenza.

    La tabella da cui importo i dati è la seguente:

    codice:
    ID	DATE		HOUR		NAME
    1	2008-06-21	03:03:10		PAUL
    2	2008-06-21	03:33:10		PAUL
    3	2008-06-21	04:03:10		PAUL
    
    4	2008-06-21	06:03:10		PAUL
    5	2008-06-21	06:33:10		PAUL
    6	2008-06-21	07:03:10		PAUL
    
    7	2008-06-21	05:25:00		JANE
    8	2008-06-21	05:45:45		JANE
    9	2008-06-21	06:15:00		JANE
    
    10	2008-06-21	08:25:00		JANE
    11	2008-06-21	08:45:45		JANE
    12	2008-06-21	09:15:00		JANE
    In colore rosso ho evidenziato i records che devo reimportare in una nuova tabella mysql, gli altri record sono da scartare.

    In pratica devo prendere da questa tabella sempre il record per quella data con l'orario più vecchio e scartare quei records uguali che hanno un'orario compreso entro un'ora dal record con l'orario più vecchio.

    Spero sia più chiaro, ma è difficile da spiegarsi scrivendo....

  4. #4
    Ma tu passi alla query una data di riferimento o deve prendere 'in generale' l'orario più vecchio.

    E vuoi l'orario più vecchio PER OGNI valore di 'Name'?

    Inoltre hai detto che vuoi scartare quelli nel range di un'ora. Ma invece tutti quelli oltre il range di un'ora vanno inclusi?

    E' difficilotta come query

  5. #5
    Utente di HTML.it L'avatar di ubbicom
    Registrato dal
    Mar 2004
    Messaggi
    1,407
    Originariamente inviato da pictor
    Ma tu passi alla query una data di riferimento o deve prendere 'in generale' l'orario più vecchio.
    Nella tabella che ho postato prendo la data e l'orario più vecchio

    E vuoi l'orario più vecchio PER OGNI valore di 'Name'?
    Esatto.

    Inoltre hai detto che vuoi scartare quelli nel range di un'ora. Ma invece tutti quelli oltre il range di un'ora vanno inclusi?
    Esatto.

    So che è difficile, spero ci sia una soluzione valida... grazie.

  6. #6
    codice:
    select * from tabella where campo1=.. and campo2=.. order by id asc limit 1
    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

  7. #7
    Utente di HTML.it L'avatar di ubbicom
    Registrato dal
    Mar 2004
    Messaggi
    1,407
    Originariamente inviato da Santino83_02
    codice:
    select * from tabella where campo1=.. and campo2=.. order by id asc limit 1
    Ti ringrazio, ma non va bene la tua query ... importa tutto e di più dal file excel...

  8. #8
    Originariamente inviato da ubbicom
    Ti ringrazio, ma non va bene la tua query ... importa tutto e di più dal file excel...
    file excel? ma non parlavamo di mysql?
    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

  9. #9
    Utente di HTML.it L'avatar di ubbicom
    Registrato dal
    Mar 2004
    Messaggi
    1,407
    Originariamente inviato da Santino83_02
    file excel? ma non parlavamo di mysql?
    Il DB è MySQL, ma la fonte dati su cui eseguire la query è un foglio excel.

    Allora la situazione è la seguente:

    1) La fonte dati è un foglio excel così formato:

    codice:
    ID	DATE		HOUR		NAME
    1	2008-06-21	03:03:10		PAUL
    2	2008-06-21	03:33:10		PAUL
    3	2008-06-21	04:03:10		PAUL
    
    4	2008-06-21	06:03:10		PAUL
    5	2008-06-21	06:33:10		PAUL
    6	2008-06-21	07:03:10		PAUL
    
    7	2008-06-21	05:25:00		JANE
    8	2008-06-21	05:45:45		JANE
    9	2008-06-21	06:15:00		JANE
    
    10	2008-06-21	08:25:00		JANE
    11	2008-06-21	08:45:45		JANE
    12	2008-06-21	09:15:00		JANE
    In colore rosso ho evidenziato i records che devo importare in una nuova tabella mysql attingendo dalla fonte dati ( il foglio excel ) , gli altri record sono da scartare.

    In pratica devo prendere da questa tabella sempre il record per quella data con l'orario più vecchio e scartare quei records uguali che hanno un'orario compreso entro un'ora dal record con l'orario più vecchio.

  10. #10
    Intanto io cercherei di costruirla 'per gradi'.

    Pensavo a come selezionare la data minore per ogni valore di Name.
    codice:
    SELECT Name, MIN(Date + Hour) as Data 
    FROM Tabella 
    GROUP BY Name
    Non so però se è sufficiente oppure se andrebbero aggregate data e ora in una 'datetime'.... e non sono neanche sicuro che la MIN possa essere applicata così facilmente alle date.

    Comunque trovate quelle poi puoi fare una JOIN con la stessa tabella, tenendo di conto i record ricavati sopra e impostando relativamente a quelli la clausola WHERE.

    Qua sotto ho scritto una schifezza assurda senza molto senso... però forse può aiutare
    codice:
    SELECT T1.* FROM Tabella T1
    LEFT JOIN (SELECT Name, Date, Hour, MIN(Date + Hour) T2 ON T2.Name = T1.ID
    WHERE T1.Date >= DATEADD(hh, 1, T2.Date)
    AND T1.Hour >= DATEADD(hh, 1, T2.Hour)
    In pratica mi creerei la tabella T2 contente i valori minimi per data e ora associati ad ogni valore di Name.
    La mando in Left Join con la tabella principale T1, utilizzando dei criteri che non si verificheranno mai; quindi otterrò come risultato solo tutti i valori della tabella T1 (infatti seleziono solo T1.*), esclusi quelli con data e ora differenti per meno di un'ora (calcolata con la DateAdd, sperando che sia Hour che Date siano di tipo Data e non delle stringhe, altrimenti vanno convertite). La differenza di un'ora l'ho calcolata rispetto aii valori ricavati in T2, che anche se non visualizzata o utilizzata nella select viene comunque creata e vista.

    E' un marchingegno molto brutto e macchinoso.... inoltre non sono sicuro di come ho unito le due TABELLE, quindi potresti avere risultati inaspettati.

    Fai delle prove a fai sapere

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