获取下一个 max(id)

问题描述

我有下表:

booking_id user_id
11 1
12 76
13 932
14 1
15 626
16 1
17 3232

我想访问用户 1 的第二个最大预订 ID。 预期结果是 user_id = 1,booking_id = 14。

我已经在这些地狱般的火焰上工作了太久,这没有任何好处:

select booking.user_id,b1.booking_id from booking 
left join(select 
            user_id,booking_id 
          from booking 

          where booking_id = (select 
                                max(booking_id) 
                              from booking 
                              where booking_id <> (select 
                                                     max(booking_id) 
                                                   from booking)) 
        group by user_id) 
as b1 on b1.user_id = booking.user_id
where booking.user_id = '1'

请注意,我已经设法将其作为计算列来执行,但这没用,我需要派生表。

解决方法

通过使用这个问题中的答案找到第二大值的最简单的 SQL 查询是什么? https://stackoverflow.com/a/7362165/14491685

您可以将查询与您的查询集成以得到这样的结果:

select * from booking 
where booking_id =
(select max(booking_id) from booking
where user_id =1 
and booking_id not in (SELECT MAX(booking_id ) FROM booking  ))
,

一个简单的方法是使用 LIMIT OFFSET

SELECT *
FROM booking
WHERE user_id = 1
ORDER BY booking_id DESC
LIMIT 1 OFFSET 1

Demo here

,

如果您使用的是 MySQL,则可以通过使用 LIMIT & OFFSET 来避免(相当混乱的)双重子查询

只需添加 order by booking_id desc LIMIT 1 OFFSET 1,您将获得第二高的 booking_id。例如...

select * from booking where user_id = 1 order by booking_id desc OFFSET 1 LIMIT 1

我在其中一张桌子上进行了测试,效果很好。如果您在 booking_id 上有索引,它应该非常快。

如果您希望拥有最高预订的用户获得第二高的预订,那么这应该可行

SELECT * FROM booking 
WHERE user_id in
   (select user_id from booking order by booking_id desc limit 1) 
ORDER BY booking_id DESC LIMIT 1 OFFSET 1 

子查询查找预订量最高的用户的user_id,然后主查询查找其次高预订量

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...