Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    [ MySQL ] Maggiore o Diverso sulle date

    Ciao a tutti,

    ho un problemino a capire come fare per selezionare dei dati attraverso il campo data,

    ho 3 tabelle : clienti , vendite , assistenze

    clienti è legato a vendite con l'id cliente la vendita è legata ad assistenze con idvendita.

    nella tabella vendite ho un capo data .

    devo ricavare l'id dei clienti che hanno acquistato solo prima del "1990-01-01"

    (visto che un cliente puo' aver comprato sia prima che dopo)

    ed eliminare clienti, i loro acquisti da vendite e le assistenze relative alle

    vendite eliminate.

    Penso che la soluzione sia piu facile di quanto penso, ma ho il cervello che fuma .

    Grazie

  2. #2
    SELECT * FROM tabella_clienti AS tc, tabella_vendite AS tv WHERE tc.id_cliente=tv.id_cliente AND tv.data<'1990-01-01'
    =======================
    http://www.abidibo.net

  3. #3
    Grazie della tempestiva risposta ma non è cosi semplice,

    in questo caso mi trova i clienti che hanno comprato si prima del 1990 ma questo cliente puo' avere comprato anche dopo .

    io devo avere chi ha comprato solo prima del 1990 ma non dopo il 1990.

    Servirebbe una negazione su maggiore (tipo !=>) ma non mi pare si possa fare

    Ringrazio anticipatamente

  4. #4
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    Dovresti prima raggruppare per cliente e recuperare la data maggiore di ciascuno di esso. A quel punto puoi verificare quelli per i quali tale data è inferiore al 1 gennaio 1990.

    Ti posto un dump di prova.

    codice:
    DROP TABLE IF EXISTS `vendite`;
    
    CREATE TABLE `vendite` (
      `id` int(11) NOT NULL auto_increment,
      `id_cliente` int(11) default NULL,
      `acquisto` date default NULL,
      PRIMARY KEY  (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
    
    /*Data for the table `vendite` */
    
    insert into `vendite` (`id`,`id_cliente`,`acquisto`) values (1,1,'2001-01-01');
    insert into `vendite` (`id`,`id_cliente`,`acquisto`) values (2,1,'1989-01-01');
    insert into `vendite` (`id`,`id_cliente`,`acquisto`) values (3,1,'2001-02-01');
    insert into `vendite` (`id`,`id_cliente`,`acquisto`) values (4,2,'1989-01-01');
    insert into `vendite` (`id`,`id_cliente`,`acquisto`) values (5,2,'1987-01-01');
    insert into `vendite` (`id`,`id_cliente`,`acquisto`) values (6,3,'1989-01-01');
    insert into `vendite` (`id`,`id_cliente`,`acquisto`) values (7,3,'2000-10-10');
    insert into `vendite` (`id`,`id_cliente`,`acquisto`) values (8,4,'1986-01-01');
    insert into `vendite` (`id`,`id_cliente`,`acquisto`) values (9,4,'1985-01-01');
    
    
    select * 
    from
    (select concat(id_cliente,max(acquisto)) as recente from vendite
    group by id_cliente) as tab1
    left join vendite as tab2 
    ON tab1.recente = concat(tab2.id_cliente,tab2.acquisto)
    where tab2.acquisto < '1990-01-01'

  5. #5
    SELECT * FROM tabella_clienti AS tc, tabella_vendite AS tv WHERE tc.id_cliente=tv.id_cliente AND tv.data<'1990-01-01' AND tv.id_cliente NOT IN (SELECT id_cliente FROM tabella_vendite WHERE tv.data>='1990-01-01');
    Suppongo esistano anche modi migliori, ma questo è uno
    =======================
    http://www.abidibo.net

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.