繁体   English   中英

mysql在最大值之前选择行

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM