mysql返回一条记录与最后一条记录不同

标签 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”或空,那么它应该再向上移动一步,直到它与上一个或空不同。

谢谢

编辑: 这是我收到的错误 enter image description here

最佳答案

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

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

关于mysql返回一条记录与最后一条记录不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44388047/

相关文章:

sql - 主键和候选键的区别

mysql - SQL JOIN,其中 tab1.colA 值位于 tab2.colB 的 JSON 列表中

sql - SQL Server 中的格式为有效小数位?

sql - 优化一条Sql查询: filter an unindexed field

mysql - 将行数据转换为MySQL中的列

mysql - 从 group by 和 unique 获得不同的结果

mysql - 在 MySQL 中查找中位数和执行计数的复杂性是多少?

php - 我怎样才能构造一个表,使字段保持原子性?

MySQL 相当于 Pandas 的 to_datetime 函数

Xampp 服务器上的 Java Applet - 在 jdbc :mysql://localhost:3306/上找不到合适的驱动程序