home bbs files messages ]

Forums before death by AOL, social media and spammers... "We can't have nice things"

   comp.databases.oracle      Overblown overpriced overengineered SHIT      2,288 messages   

[   << oldest   |   < older   |   list   |   newer >   |   newest >>   ]

   Message 972 of 2,288   
   VC to drew   
   Re: SQL question   
   16 Jan 04 12:02:56   
   
   From: boston103@hotmail.com   
      
   Hello,   
      
   It's much simpler:   
      
   select * from t1 where (a,b) in (select max(a), b from t1 group by b)   
      
      
   Rgds.   
      
      
   "drew"  wrote in message   
   news:b71c4ae4.0401160120.644f3887@posting.google.com...   
   > szeming@alumni.washington.edu (muteki) wrote in message   
   news:...   
   > > Hi,   
   > >   
   > > I am pretty new to SQL and I would like to know is it possible to do   
   > > the following task in SQL?   
   > >   
   > > I have a table containing 2 columns A, B where A is the primary key.   
   > > If the table contains the following data.   
   > >   
   > > A        B   
   > > ---      ---   
   > > 1        a   
   > > 2        b   
   > > 3        b   
   > > 4        b   
   > > 5        c   
   > > 6        c   
   > > 7        d   
   > >   
   > > I would like to run a sql statement to get rid of all the rows   
   > > containing duplicated entries of B where the smaller A will get   
   > > deleted.  (keep the last row where there is no longer duplicates of B)   
   > >   
   > > The end result will be   
   > >   
   > > A        B   
   > > ---      ---   
   > > 1        a   
   > > 4        b   
   > > 6        c   
   > > 7        d   
   > >   
   > > Thanks,   
   > >   
   > > --muteki   
   >   
   >   
   > SQL> select * from  aa;   
   >   
   >          A B   
   > ---------- -   
   >          1 a   
   >          2 b   
   >          3 b   
   >          4 b   
   >          5 c   
   >          6 c   
   >          7 d   
   >   
   > 7 rows selected.   
   >   
   >   
   > SQL> select max(a) "a",b from aa where b not in   
   >   2   (select b from aa group by b having count(*)>1 ) group by a,b   
   >   3  union   
   >   4  select max(a) "a",b from aa group by b having count(*)>1;   
   >   
   >          a B   
   > ---------- -   
   >          1 a   
   >          4 b   
   >          6 c   
   >          7 d   
   >   
   > SQL>   
      
   --- SoupGate-Win32 v1.05   
    * Origin: you cannot sedate... all the things you hate (1:229/2)   

[   << oldest   |   < older   |   list   |   newer >   |   newest >>   ]


(c) 1994,  bbs@darkrealms.ca