如何解决获取下一个 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
,
如果您使用的是 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 举报,一经查实,本站将立刻删除。