使用if条件选择每行后面的行

时间:2016-12-11 04:10:02

标签: mysql codeigniter

首先抱歉英语不好! 两个我有一个表有许多记录> 5000与以下结构

 id | uid | uam(user after me) | plan
-------------------------------------
 1  |  4  |        4           |  1
-------------------------------------
 2  |  4  |        3           |  2
-------------------------------------
 3  |  4  |        1           |  2
-------------------------------------
 4  |  4  |        9           |  1
-------------------------------------
 5  |  4  |        6           |  1
-------------------------------------
 6  |  4  |        2           |  2
-------------------------------------
 7  |  4  |        1           |  1
-------------------------------------
 8  |  4  |        3           |  2
-------------------------------------

现在我想从下表中选择if / condition

选择uam(用户跟在我后面)的行< =计算此行后的行数。换句话说,我们希望用户在达到uam数量后拥有相同的计划和用户数。

此示例表的

应为返回ID:2,3

我如何用sql或更好的codeigniter活动记录来做到这一点? 谢谢你的帮助:)

1 个答案:

答案 0 :(得分:1)

对于每条记录,您需要检查后续记录是否可以总计大于或等于该特定记录的uam的数量。

EXISTS的帮助下,您可以实现这一目标:

SELECT 
*
FROM uamtable A 
WHERE EXISTS (
  SELECT 
  1
  FROM uamtable B 
  WHERE A.ID < B.ID AND A.plan = B.plan
  HAVING COUNT(*) >= A.uam
)

注意:

A.ID < B.ID约束强制执行只有后续记录将被计为具有相同计划。

SEE DEMO