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

    [MySQL] Escludere record

    Ciao.

    Ho un problema in mysql perchè dovrei escludere da una query di estrazione tutti quei records che rispetto al primo con lo stesso tblID rientrano nella fascia di un'ora.

    Ecco un esempio:
    codice:
    +----------+---------------------+ 
    | tblID    | theDate             | 
    +----------+---------------------+ 
    | 77002221 | 2013-06-12 11:17:29 | 
    | 56009055 | 2013-06-12 11:17:29 | 
    | 77002221 | 2013-06-12 11:47:29 | 
    | 77002221 | 2013-06-12 12:17:29 | 
    | 77002221 | 2013-06-12 12:47:29 | 
    +----------+---------------------+
    Con i dati di cui sopra l'estrazione dovrebbe essere la seguente:
    codice:
    +----------+---------------------+ 
    | tblID    | theDate             | 
    +----------+---------------------+ 
    | 77002221 | 2013-06-12 11:17:29 | 
    | 56009055 | 2013-06-12 11:17:29 | 
    | 77002221 | 2013-06-12 12:47:29 | 
    +----------+---------------------+
    perchè le righe con tblID 77002221 successive al primo record rientrano in un'ora di tempo riseptto all'orario iniziale 2013-06-12 11:17:29; quindi i records che dovrei prendere devono partire da 2013-06-12 12:17:29 :
    codice:
     
    +----------+---------------------+ 
    | tblID    | theDate             | 
    +----------+---------------------+ 
    | 77002221 | 2013-06-12 11:47:29 | 
    | 77002221 | 2013-06-12 12:17:29 | 
    +----------+---------------------+
    Potreste darmi qualche suggerimento?
    Grazie
    codice:
    DROP TABLE IF EXISTS `timediff`;
    CREATE TABLE `timediff` (
      `tblID` int(10) DEFAULT NULL,
      `theDate` datetime DEFAULT NULL,
      `id` int(10) NOT NULL AUTO_INCREMENT,
      PRIMARY KEY (`id`)
    ) ENGINE=MyISAM AUTO_INCREMENT=6 DEFAULT CHARSET=latin1;
    
    -- ----------------------------
    -- Records of timediff
    -- ----------------------------
    INSERT INTO `timediff` VALUES ('77002221', '2013-06-12 11:17:29', '1');
    INSERT INTO `timediff` VALUES ('56009055', '2013-06-12 11:17:29', '2');
    INSERT INTO `timediff` VALUES ('77002221', '2013-06-12 11:47:29', '3');
    INSERT INTO `timediff` VALUES ('77002221', '2013-06-12 12:17:29', '4');
    INSERT INTO `timediff` VALUES ('77002221', '2013-06-12 12:47:29', '5');

  2. #2
    la teoria

    SELECT colonne FROM tabella WHERE ID NOT IN (SELECT ID FROM tabella WHERE condizione)

    adattala e facce sape'


  3. #3
    Utente di HTML.it L'avatar di ubbicom
    Registrato dal
    Mar 2004
    Messaggi
    1,407
    Grazie per il suggerimento, ho adattato così ma l'uscita è sbagliata...
    codice:
    mysql> SELECT
    	*
    FROM
    	`timediff`
    WHERE
    	tblID NOT IN (
    		SELECT
    			tblID
    		FROM
    			`timediff`
    		WHERE
    			theDate > ADDTIME(theDate, 10000)
    	)
    GROUP BY
    	tblID;
    +----------+---------------------+----+
    | tblID    | theDate             | id |
    +----------+---------------------+----+
    | 56009055 | 2013-06-12 11:17:29 |  2 |
    | 77002221 | 2013-06-12 11:17:29 |  1 |
    +----------+---------------------+----+
    2 rows in set
    Dovrebbe essere questa:
    codice:
    +----------+---------------------+ 
    | tblID    | theDate             | 
    +----------+---------------------+ 
    | 77002221 | 2013-06-12 11:17:29 | 
    | 56009055 | 2013-06-12 11:17:29 | 
    | 77002221 | 2013-06-12 12:47:29 | 
    +----------+---------------------+

  4. #4
    è perché il motore SQL esclude *anche* il record che prendi come riferimento (aggiungo: correttamente!). quindi dovrai aggiungere manualmente il record di riferimento (ad esempio con una UNION)

  5. #5
    Utente di HTML.it L'avatar di ubbicom
    Registrato dal
    Mar 2004
    Messaggi
    1,407
    Originariamente inviato da optime
    è perché il motore SQL esclude *anche* il record che prendi come riferimento (aggiungo: correttamente!). quindi dovrai aggiungere manualmente il record di riferimento (ad esempio con una UNION)
    Grazie, ma:
    codice:
    mysql> SELECT
    	tblID,
    	theDate
    FROM
    	`timediff`
    WHERE
    	tblID NOT IN (
    		SELECT
    			tblID
    		FROM
    			`timediff`
    		WHERE
    			(
    				theDate >= ADDTIME(theDate, '1:01:01')
    			)
    	)
    UNION ALL
    	SELECT
    		tblID,
    		theDate
    	FROM
    		`timediff`;
    +----------+---------------------+
    | tblID    | theDate             |
    +----------+---------------------+
    | 77002221 | 2013-06-12 11:17:29 |
    | 56009055 | 2013-06-12 11:17:29 |
    | 77002221 | 2013-06-12 11:47:29 |
    | 77002221 | 2013-06-12 12:17:29 |
    | 77002221 | 2013-06-12 12:47:29 |
    | 77002221 | 2013-06-12 11:17:29 |
    | 56009055 | 2013-06-12 11:17:29 |
    | 77002221 | 2013-06-12 11:47:29 |
    | 77002221 | 2013-06-12 12:17:29 |
    | 77002221 | 2013-06-12 12:47:29 |
    +----------+---------------------+
    10 rows in set

  6. #6
    quella che aggiungi sarà solo la prima dell'ora!

  7. #7
    Utente di HTML.it L'avatar di ubbicom
    Registrato dal
    Mar 2004
    Messaggi
    1,407
    Scusa ma non riesco a seguirti, cosa vuol dire:
    quella che aggiungi sarà solo la prima dell'ora!
    Forse intendi questo?:
    codice:
    mysql> SELECT
    	tblID,
    	theDate
    FROM
    	`timediff`
    WHERE
    	tblID NOT IN (
    		SELECT
    			tblID
    		FROM
    			`timediff`
    		WHERE
    			(
    				theDate >= ADDTIME(theDate, '1:01:01')
    			)
    	)
    UNION ALL
    	SELECT
    		tblID,
    		MIN(theDate)
    	FROM
    		`timediff`
    	GROUP BY
    		tblID;
    +----------+---------------------+
    | tblID    | theDate             |
    +----------+---------------------+
    | 77002221 | 2013-06-12 11:17:29 |
    | 56009055 | 2013-06-12 11:17:29 |
    | 77002221 | 2013-06-12 11:47:29 |
    | 77002221 | 2013-06-12 12:17:29 |
    | 77002221 | 2013-06-12 12:47:29 |
    | 56009055 | 2013-06-12 11:17:29 |
    | 77002221 | 2013-06-12 11:17:29 |
    +----------+---------------------+
    7 rows in set

  8. #8
    Soluzione figa.....:

    codice:
    SELECT b.* FROM 
    (SELECT min(theDate) CTIME, addtime(min(theDate),'01:00:00') CTIME_1 FROM timediff) a, timediff b
    where b.theDate=a.CTIME or b.theDate>a.CTIME_1
    Ciao
    Mik

  9. #9
    Utente di HTML.it L'avatar di ubbicom
    Registrato dal
    Mar 2004
    Messaggi
    1,407
    Originariamente inviato da Holidaysoft.it
    Soluzione figa.....:

    codice:
    SELECT b.* FROM 
    (SELECT min(theDate) CTIME, addtime(min(theDate),'01:00:00') CTIME_1 FROM timediff) a, timediff b
    where b.theDate=a.CTIME or b.theDate>a.CTIME_1
    Ciao
    Mik
    Grazie tante !

  10. #10

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.