Oracle FAQ | Your Portal to the Oracle Knowledge Grid |
Home -> Community -> Usenet -> c.d.o.server -> Re: nice sql problem
mike2322_at_hotmail.com (Mike Liu) wrote in message news:<2262aa8e.0201311410.69537c52_at_posting.google.com>...
> "Achille Carette" <acarette_nospam_at_aprico-consult.com> wrote in message news:<3c57af8d$0$33510$ba620e4c_at_news.skynet.be>...
> > It's just trick for the specific dataset. In general, it's much easier > to do in a procedure. In oracle 8.1.6 and above, this probably works, > > select * from > ( > select first_value(a) over (partition by gp order by rn) as a, b > from > ( > select a, b, rn, sum(gp) over (order by rn) as gp > from ( > select a, b, rownum rn, decode(level, 1, 1, 0) gp > from z > connect by a = prior b > start with a not in ( select b from z) > ) > ) > ) > where b not in (select a from z)
Nice query Mike. I also got this one and this one will run in most sql databases I think: no connect by and no rownums needed.
SELECT MA1.A, MB1.B
FROM (SELECT COUNT(*) MAC, Z1.A
FROM (SELECT Z1.A FROM Z Z1 WHERE NOT EXISTS (SELECT 1 FROM Z Z3 WHERE Z1.A = Z3.B)) Z1 ,(SELECT Z1.A FROM Z Z1 WHERE NOT EXISTS (SELECT 1 FROM Z Z3 WHERE Z1.A = Z3.B)) Z2 WHERE Z1.A >= Z2.A GROUP BY Z1.A) MA1 , (SELECT COUNT(*) MBC, Z1.B FROM (SELECT Z1.B FROM Z Z1 WHERE NOT EXISTS (SELECT 1 FROM Z Z3 WHERE Z1.B = Z3.A)) Z1 ,(SELECT Z1.B FROM Z Z1 WHERE NOT EXISTS (SELECT 1 FROM Z Z3 WHERE Z1.B = Z3.A)) Z2 WHERE Z1.B >= Z2.B GROUP BY Z1.B) MB1
Ronald.