从行中选择上一条记录

时间:2018-03-10 04:28:36

标签: mysql sql mysqli

示例

id |u_id
 1 |  1 
 2 |  1 
 3 |  2 
 4 |  1 
 5 |  2 
 6 |  3 

我知道,id 4的u_id为{1},但我希望在u_id之前选择id 1的最后一行4,即我想要选择id 2的行。

请注意,我不知道id

我怎样才能做到这一点?

这就是结果应该是这样的:

id |u_id 
 2 |  1
 4 |  1

5 个答案:

答案 0 :(得分:0)

select * from table where uid=1 order by id desc limit 2

答案 1 :(得分:0)

这可能会对你有所帮助。

 SELECT * FROM ( SELECT  * FROM yourTable WHERE u_id=1 ORDER BY id DESC LIMIT 2) AS tab ORDER BY tab.id ASC

答案 2 :(得分:0)

正如你的标题所述:

  

从行中选择上一条记录

以下内容为您提供 之前 2的每一行,并且不仅可以使用您在“{1}}中显示的数据”。你的例子:

SELECT *
FROM example
WHERE id IN (
    SELECT id - 1
    FROM example
    WHERE u_id = 2);

enter image description here

[SEE DEMO HERE]

答案 3 :(得分:0)

最后找出了正确的sql查询。

SELECT * FROM table WHERE u_id = 1 AND (id = 4 OR id < 4) ORDER BY id DESC LIMIT 0,2

答案 4 :(得分:0)

如果你使用的是相当新版本的MySQL,你需要的是LAG()窗口函数:

SELECT  id,
        u_id,
        LAG(id) OVER W AS prev_id
FROM MyTable
WINDOW w AS (PARTITION BY u_id ORDER BY id)
ORDER BY id, u_id;

它会产生如下结果:

id |u_id |prev_id
 1 |  1  | null
 2 |  1  |  1
 3 |  2  | null
 4 |  1  |  2
 5 |  2  |  3
 6 |  3  | null

您可以使用查询here