oracle选择行,其中一列依赖于第二列中的两个值

时间:2017-03-20 14:08:23

标签: oracle

我有用户出价项目的数据(按照时间asc排序):

item_id, win, user_id
------------------
1, 0, 1
1, 0, 2
1, 1, 1
2, 0, 3
2, 0, 4
2, 1, 3

我只需要选择在竞标某个项目时丢失的用户。因此对于item_id = 1:用户nr 1丢失,因为用户nr 2出价更高,然后用户nr 2也因为用户nr 1出价更高而丢失。对于此项,SELECT应返回user_id = 2。

如何以智能方式选择所有此类用户?

2 个答案:

答案 0 :(得分:3)

SELECT   item_id, user_id
FROM     your_table
GROUP BY item_id, user_id
HAVING   MAX( win ) = 0;

答案 1 :(得分:0)

使用您的表名更改此处的“出价”

select  t.item_id, t.user_id  from (
    select item_id, user_id 
    from bids
    group by item_id, user_id 
) t
left join (select item_id, user_id from   bids   where win = 1 ) winners
ON
t.item_id = winners.item_id
AND
t.user_id = winners.user_id
WHERE 
winners.item_id IS NULL