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

    Query che restituisce solo i record aggiornati

    Salve a tutti,
    vorrei sapere se si possono estrapolare dati utilizzando solo codice SQL.
    Spiego il problema:
    Ho una tabella che contiene il numero, il materiale e l'ora di aggiornamento di alcuni Sili

    ID SILO MATERIALE ORA
    1 5 Riso 10:00
    2 3 Frumento 11:30
    3 4 Semi 11:50
    4 5 Mais 12:00
    5 3 Fieno 13:00

    Ogni volta che viene cambiato il contenuto di un Silo, viene scritto un record con il numero, il materiale caricato e l'ora di carica
    Vorrei fare un query che mi restituisce il contenuto attuale di ogni silo in funzione dell'ora di caricamento del materiale
    In sostanza il risultato dovrebbe esere questo

    ID SILO MATERIALE ORA
    3 4 Semi 11:50
    4 5 Mais 12:00
    5 3 Fieno 13:00

    Grazie per le risposte

  2. #2
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,372
    Direi cosi

    select ID, SILO, MATERIALE, max(ORA)
    from tabella
    group by ID, SILO, MATERIALE

    comunque manca il giorno.... nel caso in cui in silo non fosse modificato durante la giornata.
    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

  3. #3
    Originariamente inviato da badaze
    Direi cosi

    select ID, SILO, MATERIALE, max(ORA)
    from tabella
    group by ID, SILO, MATERIALE

    comunque manca il giorno.... nel caso in cui in silo non fosse modificato durante la giornata.
    Purtroppo questa query mi restituisce tutti i record.
    Quello che voglio e' che mi restituisca ogni materiale (con GROUP BY) con la data piu' recente.
    Il formato dell'Ora e' YYYY-MM-DD HH:MM:SS

  4. #4
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,372
    Originariamente inviato da Gianpaolo69
    Purtroppo questa query mi restituisce tutti i record.
    Quello che voglio e' che mi restituisca ogni materiale (con GROUP BY) con la data piu' recente.
    Il formato dell'Ora e' YYYY-MM-DD HH:MM:SS
    Oooopppsss.... mea culpea

    select SILO, MATERIALE, max(ORA)
    from tabella
    group by SILO, MATERIALE
    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

  5. #5
    Originariamente inviato da badaze
    Oooopppsss.... mea culpea

    select SILO, MATERIALE, max(ORA)
    from tabella
    group by SILO, MATERIALE
    Anche in questo caso non mi restituisce tutti i record ma gran parte.
    Ho provato anche

    select SILO, MATERIALE, max(ORA)
    from tabella
    group by SILO

    Ma restituisce un risultato strano:
    il silo ed il materiale sono giusti ma l'ora si riferisce ad un id diverso, cioe' non e' l'ora piu' recente in cui quel Silo e' stato caricato :master:
    Cioe'

    codice:
    ID SILO MATERIALE ORA
    3  4    Semi      10:00 (l'Ora dell'id 1)
    4  5    Mais      11:30 (l'Ora dell'id 2)
    5  3    Fieno     11:50 (l'Ora dell'id 3)
    Ci sto' sbattendo...

  6. #6
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,372
    Sono sicuro che se vuoi avere l'ora massima per un silo ed un materiale devi fare come da me indicato. Comunque dal tuo ultimo messaggio vedendo l'ora, mi chiedo se il campo ora contiene anche la data.
    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

  7. #7
    Originariamente inviato da badaze
    Sono sicuro che se vuoi avere l'ora massima per un silo ed un materiale devi fare come da me indicato. Comunque dal tuo ultimo messaggio vedendo l'ora, mi chiedo se il campo ora contiene anche la data.
    La query che mi hai mostrato mi restituisce tutti i materiali e i siti ripetuti per ogni materiale nel GROUP BY.
    Il formato dell'Ora e' YYYY-MM-DD HH:MM:SS.
    Vorrei evitare, se possibile di utilizzare codice e fare 16 query per farmi restituire il materiale e l'ora.

    In pratica voglio evitare di fare questo:
    Nella tabella Sili ho 15 Sili.

    Eseguo una query che mi restituisce il numero di Silo
    SELECT Silo FROM Sili ORDER BY Silo
    - Risultato: 15 record da 1 a 15

    Poi ciclo per ogni numero di Silo quale materiale e' stato caricato di recente
    SELECT Materiale, Ora FROM Contenuto_Sili
    WHERE Ora = (SELECT MAX(Ora) FROM Contenuto_Sili WHERE Silo = 'Silo')

    E' possibile far fare a SQL questo lavoro eseguendo una sola query e restituendomi 15 record con Silo, Materiale ed Ora di caricamento piu' recente?



  8. #8
    up

  9. #9
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,372
    Originariamente inviato da Gianpaolo69
    up
    Posta il codice della tua query perche il mio esempio rispecchia quello che ho capito.
    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

  10. #10
    Originariamente inviato da badaze
    Posta il codice della tua query perche il mio esempio rispecchia quello che ho capito.
    Se hai un po' di pazienza (come hai dimostrato rispondendomi) ti allego in fondo al post lo script di creazione della tabella ContenutoSili.
    Utilizza un database con nome 'Test'.
    I post inviati prima sono stati cambiati per esprimere piu' semplicemente il problema

    Questa tabella invece e' quella reale che utilizzo e contiene i record dei materiali caricati.
    I primi 15 record sono stati inseriti nello stesso momento per avere una situazione iniziale (Ricordo che i sili sono 15).
    I record successivi vengono inseriti quando un silo viene ricaricato e viene registrato il Silo, il Materiale caricato e l'Ora di caricamento.
    Il risultato che voglio ottenere tramite una query SQL sono 15 record (1 per ogni Silo) con l'ultimo materiale caricato. In sostanza la situazione piu' recente.

    Spero di non essere stato lungo e ringrazio per la disponibilita'

    codice:
    USE Test;
    DROP TABLE IF EXISTS `ContenutoSili`;
    CREATE TABLE `ContenutoSili` (
      `Id` int(10) unsigned NOT NULL auto_increment,
      `Silo` int(2) unsigned NOT NULL default '0',
      `Materiale` char(6) NOT NULL default '-',
      `Ora` datetime NOT NULL default '2004-01-01 12:00:00',
      PRIMARY KEY  (`Id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci;
    --
    -- Inserimento record
    --
    INSERT INTO `ContenutoSili` VALUES
    (1,1,'MNBTC','2005-06-10 12:50:00'),
    (2,2,'MNELE','2005-06-10 12:50:00'),
    (3,3,'FeSi','2005-06-10 12:50:00'),
    (4,4,'MNBTSI','2005-06-10 12:50:00'),
    (5,5,'GRAFI','2005-06-10 12:50:00'),
    (6,6,'-','2005-06-10 12:50:00'),
    (7,7,'FeB','2005-06-10 12:50:00'),
    (8,8,'FeP','2005-06-10 12:50:00'),
    (9,9,'FeCr','2005-06-10 12:50:00'),
    (10,10,'-','2005-06-10 12:50:00'),
    (11,11,'Al','2005-06-10 12:50:00'),
    (12,12,'FeTi','2005-06-10 12:50:00'),
    (13,13,'GRAFI','2005-06-10 12:50:00'),
    (14,14,'-','2005-06-10 12:50:00'),
    (15,15,'FeNb','2005-06-10 12:50:00'),
    (16,8,'TITAN','2005-06-10 14:55:28'),
    (18,5,'TITAN','2005-06-13 14:46:04'),
    (20,1,'ALCAP','2005-06-14 11:03:32'),
    (21,5,'CUETP','2005-06-14 11:04:52'),
    (22,1,'MNBC','2005-06-14 11:22:07'),
    (23,2,'MNELE','2005-06-14 11:22:24'),
    (24,3,'FESI','2005-06-14 11:22:40'),
    (25,4,'MNBSI','2005-06-14 11:22:57'),
    (26,5,'GRAFI','2005-06-14 11:23:24'),
    (27,7,'FEBOG','2005-06-14 11:23:52'),
    (28,11,'ALFIL','2005-06-14 11:26:24'),
    (29,13,'GRAFI','2005-06-14 11:27:05'),
    (30,15,'FENBG','2005-06-14 11:27:25'),
    (31,12,'TITAN','2005-06-14 11:37:37'),
    (32,12,'FOSFO','2005-06-14 11:37:56'),
    (33,8,'FOSFO','2005-06-14 11:38:10'),
    (34,12,'TITAN','2005-06-14 11:38:27'),
    (35,12,'CROMO','2005-06-14 11:38:44'),
    (36,12,'TITAN','2005-06-14 11:38:51'),
    (37,9,'CROMO','2005-06-14 11:39:01'),
    (38,15,'NIOB','2005-06-14 11:39:54'),
    (39,7,'BORO','2005-06-14 11:40:45'),
    (40,15,'NIOB','2005-06-14 11:46:45'),
    (41,15,'NIOB','2005-06-14 11:50:05'),
    (42,15,'NIOB','2005-06-14 11:57:35'),
    (43,15,'NIOB','2005-06-14 11:58:54'),
    (44,15,'NIOB','2005-06-14 11:59:48'),
    (45,15,'NIOB','2005-06-14 12:00:43'),
    (46,15,'NIOB','2005-06-14 12:00:52'),
    (47,15,'NIOB','2005-06-14 12:03:46'),
    (48,15,'NIOB','2005-06-14 12:05:02'),
    (49,15,'NIOB','2005-06-14 12:08:00'),
    (50,15,'NIOB','2005-06-14 12:19:53');

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.