Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
mysql返回一条与上一条记录不同的记录_Mysql_Sql_Rdbms - Fatal编程技术网

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

mysql返回一条与上一条记录不同的记录,mysql,sql,rdbms,Mysql,Sql,Rdbms,这是我的问题 SELECT `orders_status_id` FROM orders_status_history WHERE `orders_id`='15' ORDER BY `date_added` DESC LIMIT 1, 1 我需要的是从一堆记录中获取最后一条记录。上面的查询在这一点上起作用,但现在我想放置一个过滤器,如果最后一条记录为空或与最后一条记录相同,则将前一条记录移动 正如您可以看到的那样,orders\u status\u id的第二条最后记录是17(与最后一条

这是我的问题

SELECT `orders_status_id` FROM orders_status_history 
WHERE `orders_id`='15' ORDER BY `date_added` DESC LIMIT 1, 1
我需要的是从一堆记录中获取最后一条记录。上面的查询在这一点上起作用,但现在我想放置一个过滤器,如果最后一条记录为空或与最后一条记录相同,则将前一条记录移动

正如您可以看到的那样,
orders\u status\u id
的第二条最后记录是17(与最后一条记录相同),因此它应该返回“8”(向上移动一步)。当最后一条记录为空时,应用相同的情况,然后向上移动一步。在本例中,如果不是“8”,而是“17”或为空,则它应该再向前移动一步,直到它与上一步或空不相同

谢谢

编辑: 这就是我得到的错误
最简单的方法可能是使用变量:

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;

这将枚举订单状态id的不同值,选择出现的第二个值。

谢谢您的回答。。请再次查看我的问题,并附上我在应用您的查询后收到的错误消息。