2017-06-06 214 views
0

这里是我的查询MySQL的返回一个记录是不一样的最后一个记录

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

我需要是从上述查询一堆records.The的得到的倒数第二个记录是什么在这一点上工作但现在我想放置过滤器,如果倒数第二个记录是空的或与上一个相同,则移动一个记录前一个。

enter image description here

正如你所看到的倒数第二个记录orders_status_id为17(同最后一条记录),因此它应该返回我“8”(移动一步了)。当第二个记录为空时应用相同的情况,然后向上移动一步。在这个例子中,如果不是“8”而是“17”或者是空的,那么它应该再向上移动一步,直到它不是最后一个或空白。

感谢

编辑: 这是我得到 enter image description here

回答

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不同的值,选择出现的第二个值。

+0

感谢您的回答.. 请再次检查我的问题附加了我应用您的查询后得到的错误消息。 –