On 04/07/07, Igor Tandetnik <[EMAIL PROTECTED]> wrote:
For each unique eid you look for a record with this eid where P is
smallest. Another way to express "smallest" is to say: there doesn't
exist a record with the same eid and a smaller value of P. Which is
precisely what my "not exists" clause is saying.

Wow. It is counter-intuitive (to me at least) that this is quick.

just happens to have the same P). If you don't, the query could be made
simpler:

select eid, P, subcase
from barforce_1 a
where not exists
    (select * from barforce_1 a1 where a1.eid = a.eid and a1.P < a.P)
order by eid;

Even better. Thanks again. But in the case where there ARE duplicates:

CREATE TEMPORARY TABLE temp (eid, P, subcase);
INSERT INTO temp (eid, P, subcase) VALUES (1, 1, 'a');
INSERT INTO temp (eid, P, subcase) VALUES (1, 1, 'b');
INSERT INTO temp (eid, P, subcase) VALUES (2, 2, 'a');
INSERT INTO temp (eid, P, subcase) VALUES (2, 2, 'b');
SELECT eid, P, subcase
FROM temp a1
WHERE NOT EXISTS (
SELECT *
FROM temp a2
 WHERE a2.eid == a1.eid AND a2.P < a1.P
)
ORDER BY eid;
DROP TABLE temp;

I get:

1,1,a
1,1,b
2,2,a
2,2,b

I would like:

1,1,a (or 1,1,b it doesn't matter which)
2,2,a (or 2,2,b)

How can I modify the query so as only one minimum per element (it
doesn't matter which one)? Is there any way of getting DISTINCT to
only operate on eid and P but not subcase?

Thanks

Jeff

-----------------------------------------------------------------------------
To unsubscribe, send email to [EMAIL PROTECTED]
-----------------------------------------------------------------------------

Reply via email to