微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

获取下一个 max(id)

如何解决获取下一个 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,然后主查询查找其次高预订量

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。