mysql返回的记录与上一条记录不同

时间:2017-06-06 10:53:07

标签: mysql sql rdbms

这是我的查询

SELECT `orders_status_id` FROM orders_status_history 
WHERE `orders_id`='15' ORDER BY `date_added` DESC LIMIT 1, 1

我需要的是从一堆记录中获取第二个最后一条记录。上面的查询现在正在工作,但现在我想放置过滤器,如果第二个最后一条记录为空或与上一条相同,则移动一条记录以前。

enter image description here

正如你可以看到orders_status_id的第二个最后一个记录是17(与最后一个记录相同)所以它应该返回我" 8"(向上移动一步)。当第二个最后一个记录为空时应用相同的情况,然后向上移动一步。在这个例子中,如果不是" 8"它是" 17"或者是空的,那么它应该向上移动一步,直到它与最后一个或空的不一样。

感谢

EDITED: 这是我得到的错误 enter image description here

1 个答案:

答案 0 :(得分:0)

最简单的方法可能是使用变量:

SELECT osh.*
FROM (SELECT osh.orders_status_id,
             (@rn := if(@osi = osh.orders_status_id, @rn,
                        if(@osi := osh.orders_status_id, @rn + 1, @rn + 1)
                       )
             ) rn
      FROM orders_status_history osh CROSS JOIN
           (SELECT @rn := 0, @osi := -1) params
      WHERE orders_id = 15
      ORDER BY date_added DESC
     ) osh
WHERE rn = 2
LIMIT 1;

这会枚举order_status_id的不同值,选择显示的第二个值。