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 所需,但我需要所有表的架构。
我有一组关于面包车的记录(序列号、工作编号、工作类型和当前里程)。
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 所需,但我需要所有表的架构。