2015-04-02 17 views
0
申請行的子集

我有如下表:條件列在MySQL

row_number itemID score 
1   45  99 
2   45  47 
1   46  98 
2   46  20 
1   47  98 
2   47  20 
…   …  … 

這是下面的查詢的輸出:

SET @num := 0, @itemID_grouping := ''; 

SELECT row_number, 
     itemID, 
     score 
FROM (SELECT itemID, 
       score, 
       @num := IF(@itemID_grouping = itemID, @num + 1, 1) AS row_number, 
       @itemID_grouping := itemID       AS temp 
     FROM my_table 
     ORDER BY itemID, 
        score DESC) AS x 
WHERE x.row_number <= 2; 

從下面的原始表:

my_table: 
itemID score 
46  99 
…  … 

因此,對於每個itemID,我有一組兩個值(兩個最高分)。

我想另一列包含'y'或1,如果,對於每組,具有row_number=1的數字大於某個閾值並且row_number=2的數字低於某個閾值。有任何想法嗎?

回答

0

OK我找到了答案(它可能不是非常快,但它的工作):

set @num := 0, @itemID_grouping := '',@num_temp:=0,@flag1:=0,@flag2:=0; 

select row_number,itemID, score,flag2 
from 
(
    select itemID,score, 
     @num := if(@itemID_grouping = itemID, @num + 1, 1) as row_number, 
     @flag1:= if(@num=1 AND score>90,1,0) as flag1, 
     @flag2:= if(@num=2 AND @flag_temp=1 AND score<70,1,0) as flag2, 
     @itemID_grouping := itemID as temp, 
     @flag_temp:[email protected] as temp_flag 
    from my_table 
    order by itemID,score desc 
) as x 
where x.row_number <= 2;