SQL 显示字段中特定日期类型的最近日期之后出现的记录

SQL display record that occurs after the most recent of a specific date type in a field

我有一组关于面包车的记录(序列号、工作编号、工作类型和当前里程)。

select serial_number, call_ref, call_type_description, callm_data19
from calls
left join equipment on link_to_equipment=equipment_code
inner join lu_call_types on call_type=call_type_code
left join call_more on call_ref=callm_link_to_call
where serial_number = 'SH12ZLN'
order by call_ref desc

我希望能够只显示在最近的 "van service" 记录之后出现的下一条 "van inspection" 记录。

这里是数据的快照

SH12ZLN 3023152 Van Inspection  83980
SH12ZLN 3019319 Van Inspection  83046
SH12ZLN 3016999 Van Servicing   NULL
SH12ZLN 3016346 Van Inspection  81818
SH12ZLN 3012977 Van Inspection  80742
SH12ZLN 3010435 Van Inspection  79909
SH12ZLN 3008528 Van Repairs NULL
SH12ZLN 3006880 Van Inspection  78577
SH12ZLN 3001942 Van Inspection  76974
SH12ZLN 2998209 Van Inspection  75976
SH12ZLN 2994475 Van Inspection  75285
SH12ZLN 2991756 Van Repairs NULL
SH12ZLN 2989642 Van Inspection  74408
SH12ZLN 2985795 Van Inspection  73642
SH12ZLN 2981952 Van Inspection  72838
SH12ZLN 2978257 Van Inspection  72011
SH12ZLN 2975667 Van Inspection  70692
SH12ZLN 2972244 Van Inspection  69732
SH12ZLN 2969157 Van Inspection  68821
SH12ZLN 2959335 Van Inspection  67891
SH12ZLN 2956295 Van Inspection  66994
SH12ZLN 2948516 Van Inspection  66481
SH12ZLN 2946213 Van Inspection  65778
SH12ZLN 2939497 Van Inspection  64408
SH12ZLN 2937538 Van Inspection  63765
SH12ZLN 2934421 Van Inspection  62937
SH12ZLN 2932707 Van Inspection  61645
SH12ZLN 2930711 Van Inspection  60713
SH12ZLN 2930023 Van Inspection  59683
SH12ZLN 2924989 Van Inspection  58372
SH12ZLN 2924830 Van Repairs NULL
SH12ZLN 2922412 Van Inspection  57474
SH12ZLN 2919005 Van Servicing   NULL
SH12ZLN 2918376 Van Repairs NULL

澄清 - 我希望它只产生以下记录

SH12ZLN 3019319 Van Inspection  83046

问题澄清后,我编辑了我的答案。 要解决此问题,您应该找到 'Van Servicing' 类型中最高的 job_number 类型,这意味着最近的类型。你可以用子查询:

SELECT MAX(job_number) FROM tbl WHERE id = 'SH12ZLN' AND type = 'Van Servicing'

在您获得最近的服务后 job_number 只需过滤 job_number 高于最近找到的行和 select 具有最低 job_number 的行。

最终查询可能如下所示:

SELECT TOP 1 * FROM tbl WHERE 
job_number > (SELECT MAX(job_number) FROM tbl WHERE id = 'SH12ZLN' 
    AND type = 'Van Servicing')
AND type = 'Van Inspection'
ORDER BY job_number ASC

查看 sqlfiddle 试试看:http://sqlfiddle.com/#!3/64dfc/2

P.S。正如我从最初的问题中可以看出的那样,您的示例数据是从查询本身接收的。您的查询可以增强到 return 所需,但我需要所有表的架构。