[英]mysql select row before max value
我的要求是获取max(create_date)
之前的行。
SELECT servicecalls_servicecall_id, max(created_at) FROM
service_followup_details where servicecalls_servicecall_id IN (SELECT
service_call_id from service_calls where status=2) group by
servicecalls_servicecall_id
我怎样才能通过 MySQL 查询来做到这一点?
获取最大值(create_at),然后选择小于该最大值的那个。
select servicecalls_servicecall_id,created_at
from `service_followup_details`
where created_at<(
SELECT max(created_at)
FROM `service_followup_details`
where servicecalls_servicecall_id IN
(SELECT service_call_id from service_calls
where status=2)
group by servicecalls_servicecall_id
)
order by created_at desc
limit 1
;
那么你可以在ROW_NUMBER()
函数的帮助下实现这一点。 在下面检查我的实现。 我所做的是,我按DESC
顺序按created_at
对记录进行排序。 当然,这是由servicecalls_servicecall_id
分区的,因此序列将为每个新的servicecalls_servicecall_id
重新启动。 然后,您可以简单地选择具有row_number=2
的记录来获得最接近 max created_date
的记录。
SELECT servicecalls_servicecall_id,
ROW_NUMBER() OVER (partition by servicecalls_servicecall_id ORDER BY created_at DESC) AS row_number
FROM service_followup_details
WHERE servicecalls_servicecall_id IN (
SELECT service_call_id FROM service_calls WHERE status=2
)
AND row_number = 2;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.