Re: challenging query - Mailing list pgsql-sql
From | Masaru Sugawara |
---|---|
Subject | Re: challenging query |
Date | |
Msg-id | 20011006181844.7E29.RK73@echna.ne.jp Whole thread Raw |
In response to | Re: challenging query (Haller Christoph <ch@rodos.fzk.de>) |
Responses |
Re: challenging query
|
List | pgsql-sql |
On Fri, 05 Oct 2001 17:03:41 METDST Haller Christoph wrote: > > > > Consider the following table: > > > > A B C D select? > > ------------------------------- > > 1 FOO A1 100 n > > 1 BAR Z2 100 n > > 2 FOO A1 101 y > > 2 BAR Z2 101 y > > 3 FOO A1 102 y > > 4 BAR Z2 99 y > > 5 FOO A1 99 n > > 6 BAR Z2 98 n > > 7 FOO AB 103 y > > 7 BAR ZY 103 y > > > > This table has the idea of "groups", that is, a group is defined as > > all of the words from B that have the same number A. The values in > > column C also matter- we want to select both groups A=7 and A=1 since > > they contain different values C. Note that the groups defined by A=1 > > and A=3 are distinct- they do not contain the same number of words > > from B, so we want to select them both. Also note that D is datetime, > > and all the rows with the same number A will have the same D (this is > > actually ensured by a single row in another table.) > > > > I want to select all of the numbers A which define distinct groups and > > have the highest datetime D. Is this possible in a SQL query? > > > Now that I've read your request more attentively, I understand what > you want. But I have to admit I have no idea how to word the query, > I even don't know if it's possible at all. > Regards, Christoph > I also haven't satisfactorily understood the mean of the epilogue,but I probably think he wanted to account for the followingtable which is separated into "groups". A B C D select? ------------------------------------ 1 FOO A1 100 n 1 BAR Z2 100 n 2 FOO A1 101 y 2 BAR Z2 101 y --------------------------------- 5 FOO A1 99 n 3 FOO A1 102 y --------------------------------- 6 BAR Z2 98 n 4 BAR Z2 99 y --------------------------------- 7 FOO AB 103 y 7 BAR ZY 103 y for instance: select u0.A, u0.B, u0.C, u0.D from (select t0.*, t1.cnt from (select a, count(*) as cnt from test_table group by a ) as t1 inner join test_table as t0 on(t0.a = t1.a) ) as u0 where not exists (select u1.* from (select t0.*, t1.cnt from (select a, count(*) as cnt from test_table group by a ) as t1 inner join test_table as t0 on(t0.a= t1.a) ) as u1 where u1.cnt = u0.cnt and u1.a != u0.a and u1.d > u0.d and u1.b = u0.b and u1.c = u0.c ) ; a | b | c | d ---+-----+----+-----2 | BAR | Z2 | 1012 | FOO | A1 | 1013 | FOO | A1 | 1024 | BAR | Z2 | 997 | BAR | ZY | 1057 | FOO | AB| 105 (6 rows) Have a nice weekend! ---------------------- Masaru Sugawara