这是我的查询
SELECT `orders_status_id` FROM orders_status_history
WHERE `orders_id`='15' ORDER BY `date_added` DESC LIMIT 1, 1
我需要的是从一堆记录中获取第二个最后一条记录。上面的查询现在正在工作,但现在我想放置过滤器,如果第二个最后一条记录为空或与上一条相同,则移动一条记录以前。
正如你可以看到orders_status_id
的第二个最后一个记录是17(与最后一个记录相同)所以它应该返回我" 8"(向上移动一步)。当第二个最后一个记录为空时应用相同的情况,然后向上移动一步。在这个例子中,如果不是" 8"它是" 17"或者是空的,那么它应该向上移动一步,直到它与最后一个或空的不一样。
感谢
答案 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
的不同值,选择显示的第二个值。