我有两个表,假设它是客户和repair_orders。
表格中的问题相关列:
客户表 :
- id (Bigint) 主键,
- last_seen(日期)
repair_orders表 :
- 订单编号
- customer_id (Bigint) 外键(引用客户表中的 ID)
- 关闭(日期)
我的问题是我想要"最大关闭(日期)"的差异和当我选择特定时间段的客户时,客户表中每个 ID 的"第二多最大关闭(日期)"。
目前,我能够获得id和最大关闭(日期)和相关Id,但如果可能的话,我希望所有三个"id,最大关闭(日期)和second_max关闭(日期)"在一个结果中。
我用来获取 id 和最大关闭(日期)的查询是:
SELECT c.id, max(r.closed)
FROM customers c
INNER JOIN repair_orders r
ON c.id = r.customer_id
WHERE c.last_seen >= '2017-01-01'
AND c.last_seen < '2017-02-01' group by c.id ;
select r.id, o1.id, o2.id
from (
select c.id,
max(r1.closed) as date1,
max(r2.closed) as date2
from customers c
join repair_orders r1 on c.id = r1.customer_id
join repair_orders r2 on c.id = r2.customer_id and r1.closed > r2.closed
group by 1
) r
join repair_orders o1 on r.id = o1.customer_id and r.date1 = r1.closed
join repair_orders o2 on r.id = o2.customer_id and r.date2 = r2.closed
但是没有索引就太慢了closed