【问题标题】:How to get previous last row in MySQL如何在 MySQL 中获取上一个最后一行
【发布时间】:2021-05-29 09:36:24
【问题描述】:

我在下面提到了两个表。

表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;

【问题讨论】:

标签: mysql mysql-5.7


【解决方案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;

【讨论】:

  • 出现一些错误,我认为ROW_NUMBER() 在 MySQL 版本 5.7.18 中不起作用
  • 除非你的任务或情况严格要求你使用过时的 MySQL 5.7,否则我强烈建议升级到 MySQL 8+。
  • 它需要 MySQL 5.7 :(
  • @SophiaWilson 我给了你一个可以在 MySQL 5.7 上运行的选项,但我不推荐它。
猜你喜欢
  • 1970-01-01
  • 2019-03-09
  • 2016-11-12
  • 2019-11-18
  • 1970-01-01
  • 1970-01-01
  • 2017-09-30
  • 1970-01-01
  • 2014-06-29
相关资源
最近更新 更多