如何获取 MySQL 中的前最后一行

How to get previous last row in MySQL

我在下面提到了两个表格。

表 1

ID      ref_id
O-1     rt-1-r
O-2     rx-2-e

表 2

ref_id     seq     value
rt-1-r     1       10
rt-1-r     2       15
rt-1-r     3       0
rt-1-r     4       18
rx-2-e     12      1
rx-2-e     13      13
rx-2-e     14      21

需要输出

ID      Value
O-1     0
O-2     13

我尝试了下面提到的查询,但是当我在 IN 中传递多个 ID 时,它对一个 ID 有效。

select b.ID, a.Value
FROM Table2 a
LEFT JOIN Table1 b ON a.ref_id = b.ref_id 
WHERE a.ID IN ('O-1')
order by a.seq desc limit 1 OFFSET 1;

我会在这里使用 ROW_NUMBER

WITH cte AS (
    SELECT *, ROW_NUMBER() OVER (PARTITION BY ref_id ORDER BY seq DESC) rn
    FROM Table2
)

SELECT t1.ID, t2.value
FROM Table1 t1
INNER JOIN cte t2
    ON t2.ref_id = t1.ref_id
WHERE t2.rn = 2;

我不喜欢为此不使用分析函数,但如果你不得不这样做,这里有一种方法:

SELECT
    t1.ID,
    (SELECT value FROM Table2 t2
     WHERE t2.ref_id = t1.ref_id AND
           t2.seq < (SELECT MAX(s.seq) FROM Table2 s WHERE s.ref_id = t2.ref_id)
     ORDER BY t2.seq DESC LIMIT 1) AS value
FROM Table1 t1;