Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it L'avatar di Aires
    Registrato dal
    Jan 2010
    Messaggi
    725

    Ricerca Interna al Max() (Mysql)

    Ciao a tutti, scusate il titolo particolare ma non sapevo come descrivere il problema.

    A causa di una migrazione tra due tabelle devo modificare una query e mi è sorto un dubbio.

    Tabella_OLD
    codice:
    id, nome, descrizione, data_inizio, data_fine
    Tabella_NEW
    codice:
    id, nome, descrizione, data, stato
    Come si nota quindi non abbiamo piu inizio e fine ma solo data correlata dal campo stato che indica se si tratta di un inizio o di una fine.

    La query incriminata è questa
    codice:
    Select id, nome, descrizione, max(data_fine)as massima from Tabella_OLD where ....
    Ora mi chiedo come faccio quel max(data_fine), dovrei fare una query all'interno della query?
    I problemi sono i seguenti:
    1) Come integrare questa nuova query per via che il tutto funzioni?
    2) Come devo fare se alla fine ho una group by per nome e descrizione?

    Grazie a tutti
    Originariamente inviato da qazar
    Se finisci di leggere il thread mi sono corretto,è solo i kernel scritto in html.
    Originariamente inviato da rnlflame
    Comunque non dovevano crollare

  2. #2

  3. #3
    Utente di HTML.it L'avatar di Aires
    Registrato dal
    Jan 2010
    Messaggi
    725
    Nicola, magari è la soluzione adatta, in effetti mi era venuta subito in mente però quel che mi chiedo è questo, non so se è giusto quel metodo perche collego la subquery alla query dopo il FROM e non vorrei che tutta la query sia influenzata da quel campo.

    Per capirci non voglio vedere il campo con Massima Data Fine ma voglio vedere il record che scaturisce dalla query e per quel record qual'è la massima data di fine
    Originariamente inviato da qazar
    Se finisci di leggere il thread mi sono corretto,è solo i kernel scritto in html.
    Originariamente inviato da rnlflame
    Comunque non dovevano crollare

  4. #4
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    Originariamente inviato da Aires
    Per capirci non voglio vedere il campo con Massima Data Fine ma voglio vedere il record che scaturisce dalla query e per quel record qual'è la massima data di fine
    Per capirci posta il dump di tabella_old comprensivo di qualche insert e il risultato atteso in tabella_new

  5. #5
    Utente di HTML.it L'avatar di Aires
    Registrato dal
    Jan 2010
    Messaggi
    725
    Ok ci provo

    Tabella_OLD
    codice:
    CREATE TABLE /*!32312 IF NOT EXISTS*/ "tabella_OLD" (
      "id" int(11) unsigned NOT NULL AUTO_INCREMENT,
      "nome" varchar(255) DEFAULT NULL,
      "descrizione" varchar(255) DEFAULT NULL,
      "data_inizio" timestamp NULL DEFAULT NULL,
      "data_fine" timestamp NULL DEFAULT NULL,
      "tipo" int(11) unsigned DEFAULT NULL,
      "gruppo" varchar(255) DEFAULT NULL,
      "timestamp" timestamp NULL DEFAULT CURRENT_TIMESTAMP,
      PRIMARY KEY ("id"),
      KEY "NewIndex" ("nome","descrizione","tipo")
    ) AUTO_INCREMENT=5460;
    Qualche Insert per la tabella OLD
    codice:
    INSERT INTO "Tabella_OLD" ("id", "nome", "descrizione", "data_inizio", "data_fine", "tipo", "gruppo", "timestamp") VALUES
    	('63','1080','prova per 1080','2010-12-02 15:46:42','0000-00-00 00:00:00','55','Gruppo Tecnici','2010-12-03 18:26:12');
    INSERT INTO "Tabella_OLD" ("id", "nome", "descrizione", "data_inizio", "data_fine", "tipo", "gruppo", "timestamp") VALUES
    	('64','1080','prova per 1080','2010-12-05 01:23:31','0000-00-00 00:00:00','55','Gruppo Tecnici','2010-12-06 08:07:52');
    INSERT INTO "Tabella_OLD" ("id", "nome", "descrizione", "data_inizio", "data_fine", "tipo", "gruppo", "timestamp") VALUES
    	('65','1080','prova per 1080','2010-12-02 15:46:42','2011-01-01 01:20:34','55','Gruppo Tecnici','2011-01-02 14:12:34');
    INSERT INTO "Tabella_OLD" ("id", "nome", "descrizione", "data_inizio", "data_fine", "tipo", "gruppo", "timestamp") VALUES
    	('66','3425','prova per 3245','2011-02-22 21:30:12','0000-00-00 00:00:00','98','Gruppo Amministrazione','2011-02-23 10:50:11');
    INSERT INTO "Tabella_OLD" ("id", "nome", "descrizione", "data_inizio", "data_fine", "tipo", "gruppo", "timestamp") VALUES
    	('67','3245','prova per 3245','2011-02-22 21:30:12','2011-02-22 23:55:11','98','Gruppo Amministrazione','2011-02-23 10:51:25');
    Tabella_NEW
    codice:
    CREATE TABLE /*!32312 IF NOT EXISTS*/ "tabella_NEW" (
      "id" int(11) unsigned NOT NULL AUTO_INCREMENT,
      "nome" varchar(255) DEFAULT NULL,
      "descrizione" varchar(255) DEFAULT NULL,
      "data_evento" timestamp NULL DEFAULT NULL,
      "stato" int(3) unsigned DEFAULT NULL,
      "tipo" int(11) unsigned DEFAULT NULL,
      "gruppo" varchar(255) DEFAULT NULL,
      "timestamp" timestamp NULL DEFAULT CURRENT_TIMESTAMP,
      PRIMARY KEY ("id"),
      KEY "NewIndex" ("nome","descrizione","tipo")
    ) AUTO_INCREMENT=3;
    Qualche Insert per la tabella NEW
    codice:
    INSERT INTO "Tabella_NEW" ("id", "nome", "descrizione", "data_evento", "stato", "tipo", "gruppo", "timestamp") VALUES
    	('4','1080','prova per 1080','2010-12-02 15:46:42','1','55','Gruppo Tecnici','2010-12-03 18:26:12');
    INSERT INTO "Tabella_NEW" ("id", "nome", "descrizione", "data_inizio", "data_fine", "tipo", "gruppo", "timestamp") VALUES
    	('5','1080','prova per 1080','2010-12-05 01:23:31','1','55','Gruppo Tecnici','2010-12-06 08:07:52');
    INSERT INTO "Tabella_NEW" ("id", "nome", "descrizione", "data_inizio", "data_fine", "tipo", "gruppo", "timestamp") VALUES
    	('6','1080','prova per 1080','2011-01-01 01:20:34','4','55','Gruppo Tecnici','2011-01-02 14:12:34');
    INSERT INTO "Tabella_NEW" ("id", "nome", "descrizione", "data_inizio", "data_fine", "tipo", "gruppo", "timestamp") VALUES
    	('7','3425','prova per 3245','2011-02-22 21:30:12','1','98','Gruppo Amministrazione','2011-02-23 10:50:11');
    INSERT INTO "Tabella_NEW" ("id", "nome", "descrizione", "data_inizio", "data_fine", "tipo", "gruppo", "timestamp") VALUES
    	('8','3245','prova per 3245','2011-02-22 23:55:11','98','4','Gruppo Amministrazione','2011-02-23 10:51:25');
    La query che usavo sulla Tabella_OLD è questa
    codice:
    SELECT SQL_CALC_FOUND_ROWS COUNT(tbs.id) AS Num, tbs.nome, i.descrizione_macchina, tbs.descrizione,MAX(data_fine) AS MaxDataFine, tipo, gruppo FROM Tabella_OLD tbs LEFT JOIN other i ON i.id = tbs.id_installazione GROUP BY tbs.nome, tbs.descrizione
    Ora con la nuova tabella vorrei ottenere lo stesso risultato ma mi blocco su MAX(data_fine)

    (Ps la tabella stato è cosi composta: 1=Inizio | 4=Fine)

    Grazie mille!
    Originariamente inviato da qazar
    Se finisci di leggere il thread mi sono corretto,è solo i kernel scritto in html.
    Originariamente inviato da rnlflame
    Comunque non dovevano crollare

  6. #6
    Utente di HTML.it L'avatar di Aires
    Registrato dal
    Jan 2010
    Messaggi
    725
    Ok ci provo

    Tabella_OLD
    codice:
    CREATE TABLE /*!32312 IF NOT EXISTS*/ "tabella_OLD" (
      "id" int(11) unsigned NOT NULL AUTO_INCREMENT,
      "nome" varchar(255) DEFAULT NULL,
      "descrizione" varchar(255) DEFAULT NULL,
      "data_inizio" timestamp NULL DEFAULT NULL,
      "data_fine" timestamp NULL DEFAULT NULL,
      "tipo" int(11) unsigned DEFAULT NULL,
      "gruppo" varchar(255) DEFAULT NULL,
      "timestamp" timestamp NULL DEFAULT CURRENT_TIMESTAMP,
      PRIMARY KEY ("id"),
      KEY "NewIndex" ("nome","descrizione","tipo")
    ) AUTO_INCREMENT=5460;
    Qualche Insert per la tabella OLD
    codice:
    INSERT INTO "Tabella_OLD" ("id", "nome", "descrizione", "data_inizio", "data_fine", "tipo", "gruppo", "timestamp") VALUES
    	('63','1080','prova per 1080','2010-12-02 15:46:42','0000-00-00 00:00:00','55','Gruppo Tecnici','2010-12-03 18:26:12');
    INSERT INTO "Tabella_OLD" ("id", "nome", "descrizione", "data_inizio", "data_fine", "tipo", "gruppo", "timestamp") VALUES
    	('64','1080','prova per 1080','2010-12-05 01:23:31','0000-00-00 00:00:00','55','Gruppo Tecnici','2010-12-06 08:07:52');
    INSERT INTO "Tabella_OLD" ("id", "nome", "descrizione", "data_inizio", "data_fine", "tipo", "gruppo", "timestamp") VALUES
    	('65','1080','prova per 1080','2010-12-02 15:46:42','2011-01-01 01:20:34','55','Gruppo Tecnici','2011-01-02 14:12:34');
    INSERT INTO "Tabella_OLD" ("id", "nome", "descrizione", "data_inizio", "data_fine", "tipo", "gruppo", "timestamp") VALUES
    	('66','3425','prova per 3245','2011-02-22 21:30:12','0000-00-00 00:00:00','98','Gruppo Amministrazione','2011-02-23 10:50:11');
    INSERT INTO "Tabella_OLD" ("id", "nome", "descrizione", "data_inizio", "data_fine", "tipo", "gruppo", "timestamp") VALUES
    	('67','3245','prova per 3245','2011-02-22 21:30:12','2011-02-22 23:55:11','98','Gruppo Amministrazione','2011-02-23 10:51:25');
    Tabella_NEW
    [CODE]
    CREATE TABLE /*!32312 IF NOT EXISTS*/ "tabella_OLD" (
    "id" int(11) unsigned NOT NULL AUTO_INCREMENT,
    "nome" varchar(255) DEFAULT NULL,
    "descrizione" varchar(255) DEFAULT NULL,
    "data_evento" timestamp NULL DEFAULT NULL,
    "stato" int(3) unsigned DEFAULT NULL,
    "tipo" int(11) unsigned DEFAULT NULL,
    "gruppo" varchar(255) DEFAULT NULL,
    "timestamp" timestamp NULL DEFAULT CURRENT_TIMESTAMP,
    PRIMARY KEY ("id"),
    KEY "NewIndex" ("nome","descrizione"

  7. #7
    Utente di HTML.it L'avatar di Aires
    Registrato dal
    Jan 2010
    Messaggi
    725
    Ok ci provo

    Tabella_OLD
    codice:
    CREATE TABLE /*!32312 IF NOT EXISTS*/ "tabella_OLD" (
      "id" int(11) unsigned NOT NULL AUTO_INCREMENT,
      "nome" varchar(255) DEFAULT NULL,
      "descrizione" varchar(255) DEFAULT NULL,
      "data_inizio" timestamp NULL DEFAULT NULL,
      "data_fine" timestamp NULL DEFAULT NULL,
      "tipo" int(11) unsigned DEFAULT NULL,
      "gruppo" varchar(255) DEFAULT NULL,
      "timestamp" timestamp NULL DEFAULT CURRENT_TIMESTAMP,
      PRIMARY KEY ("id"),
      KEY "NewIndex" ("nome","descrizione","tipo")
    ) AUTO_INCREMENT=5460;
    Qualche Insert per la tabella OLD
    codice:
    INSERT INTO "Tabella_OLD" ("id", "nome", "descrizione", "data_inizio", "data_fine", "tipo", "gruppo", "timestamp") VALUES
    	('63','1080','prova per 1080','2010-12-02 15:46:42','0000-00-00 00:00:00','55','Gruppo Tecnici','2010-12-03 18:26:12');
    INSERT INTO "Tabella_OLD" ("id", "nome", "descrizione", "data_inizio", "data_fine", "tipo", "gruppo", "timestamp") VALUES
    	('64','1080','prova per 1080','2010-12-05 01:23:31','0000-00-00 00:00:00','55','Gruppo Tecnici','2010-12-06 08:07:52');
    INSERT INTO "Tabella_OLD" ("id", "nome", "descrizione", "data_inizio", "data_fine", "tipo", "gruppo", "timestamp") VALUES
    	('65','1080','prova per 1080','2010-12-02 15:46:42','2011-01-01 01:20:34','55','Gruppo Tecnici','2011-01-02 14:12:34');
    INSERT INTO "Tabella_OLD" ("id", "nome", "descrizione", "data_inizio", "data_fine", "tipo", "gruppo", "timestamp") VALUES
    	('66','3425','prova per 3245','2011-02-22 21:30:12','0000-00-00 00:00:00','98','Gruppo Amministrazione','2011-02-23 10:50:11');
    INSERT INTO "Tabella_OLD" ("id", "nome", "descrizione", "data_inizio", "data_fine", "tipo", "gruppo", "timestamp") VALUES
    	('67','3245','prova per 3245','2011-02-22 21:30:12','2011-02-22 23:55:11','98','Gruppo Amministrazione','2011-02-23 10:51:25');
    Tabella_NEW
    [CODE]
    CREATE TABLE /*!32312 IF NOT EXISTS*/ "tabella_OLD" (
    "id" int(11) unsigned NOT NULL AUTO_INCREMENT,
    "nome" varchar(255) DEFAULT NULL,
    "descrizione" varchar(255) DEFAULT NULL,
    "data_evento" timestamp NULL DEFAULT NULL,
    "stato" int(3) unsigned DEFAULT NULL,
    "tipo" int(11) unsigned DEFAULT NULL,
    "gruppo" varchar(255) DEFAULT NULL,
    "timestamp" timestamp NULL DEFAULT CURRENT_TIMESTAMP,

  8. #8
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    codice:
    insert into tabella_new (id,nome,descrizione,data_evento,tipo,gruppo,timestamp)
    select id,nome,descrizione,data_fine,tipo,gruppo,timestamp from tabella_old t1
    where data_fine = (select max(data_fine)
    		   from tabella_old as t2
    	           where t1.nome = t2.nome and t1.descrizione = t2.descrizione)

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.