如何选择两个MySQL行,然后比较一列并返回一个输出

时间:2017-07-19 18:24:12

标签: mysql

我有一个像这样的结构的表,

Device | paid | time
abc       1    2 days ago
abc       0    1 day ago
abc       0    5 mins ago

是否可以编写一个查询,检查Device = abc所有行上的付费列,然后输出最近两行不同的行。基本上,像if语句一样,如果第1行= 1且第2行= 0输出,但只有当它是最近的两列不同时才输出。例如,在这种情况下,第一行和第二行。每当用户从免费帐户更改为付费帐户等时,该表都会更新。由于不同的原因,它也会在不同的列中更新,因此例如重复的0。

我知道这可能会更好地完成另一个表并在每次用户切换帐户类型时更新它,但有没有办法让这个工作?

由于

2 个答案:

答案 0 :(得分:0)

使用LIMIT来限制mysql上的记录数量: http://www.mysqltutorial.org/mysql-limit.aspx

在您的情况下,请使用LIMIT 2

然后将您刚刚选择的2条记录放入数组中,如果值不同则比较数组。如果它们不同则打印

答案 1 :(得分:0)

实施例: http://rextester.com/MABU7860需要对边缘案例进行进一步测试,但这似乎有效。

SELECT A.*, B.*
FROM SQLfoo A
INNER JOIN SQLFoo B
 on A.Device = B.Device
and A.mTime < B.mTime
WHERE A.Paid <> B.Paid
  and A.device = 'abc'
ORDER BY B.mTime Desc, A.MTime Desc
LIMIT 1

通过在一个表上的时间小于下一个表的时间的设备执行自联接(因此两个记录永远不会相互匹配,我们只能通过一个方式获得重新连接)并按顺序排序降序,最高时间出现在结果的第一位,因为我们限制在单个设备上,我们不需要关心设备。然后我们只需要将第一个来源的付费与第二个来源中的付费进行比较,然后返回遇到的第一个结果,即限制1。

或使用用户变量 http://rextester.com/TWVEVX7830

在其他引擎中,可以通过执行如上所述的连接来完成此任务,分配由设备分区的行号,然后简单地返回值为1的所有row_numbers;这将是最早的日期差异。