根据几条记录创建SQL查询?

时间:2019-01-29 08:06:56

标签: sql database ms-access

我想获得一个SQL查询,它向我提供了已关闭服务请求的概述。这基于该服务请求的任务。 几个论坛不起作用:-(

我的表格:ServiceRequestTasks

SRNr | TaskNr | TaskDescr | TaskCreationDate | InfoRecDate
0001 | T00000 |开始_____ | 1/01/2018
0001 | T00001 | SD2C____ | 2/01/2018 _______ | 2019年4月1日
0001 | T00002 | D________ | 5/01/2019
0001 | T00003 | RAI______ | 6/01/2019 _______ | 12/01/2019
0001 | T00004 | SCR_____ | 15/01/2019
0001 | T00005 | RAI______ | 16/01/2019 ______ || 22/01/2019
0001 | T00006 | SCR_____ | 2019年1月28日
0001 | T00007 |结束______ | 2019年1月28日
0002 | T00008 |开始_____ | 2018年9月1日
0002 | T00009 | SCR_____ | 10/01/2018
0002 | T00010 | SD2C____ | 11/01/2018 _______ | 12/01/2019
0002 | T00011 | SCR_____ | 13/01/2019
0002 | T00012 |结束______ | 13/01/2018
0003 | T00013 |开始_____ | 14/01/2018
0003 | T00014 | SD2C____ | 15/01/2018 _______ | 16/01/2018
0004 | T00015 |开始_____ | 16/01/2018
0004 | T00016 | SCR_____ | 17/01/2018
0004 | T00017 | SCR_____ | 18/01/2018
0004 | T00018 | SD2C____ | 19/01/2018 _______ || 30/01/2019
0004 | T00019 | RAI______ | 1/02/2019 ________ || 2/02/2019
0004 | T00020 | SCR_____ | 2/02/2019
0004 | T00021 |结束______ | 2019年7月2日

TaskNr具有唯一的ID

仅在TaskDescr =(SD2C或RAI)并且SR关闭(SR包含任务描述“ End”)时才填写InfoRecDate。

预期输出:

  • 每个闭合SR 1行-> SR包含一个TaskDescr =“ End”的任务
  • 每个已关闭的SR的最新InfoRecDate
  • SR截止日期(= TaskDescr“结束”的TaskCreationDate)

是这样的:
SR号| “最新” InfoRecDate |结束日期

1 | 22/01/2019 | 2019年1月28日

2 | 12/01/2019 | 2018年1月13日

4 | 02/02/2019 | 2019年7月2日

2 个答案:

答案 0 :(得分:0)

将要求分解为两部分:

  1. 获取TaskDescr ='End'的所有行(假设每个SRNr始终只有一个匹配行)
  2. 为每个这些SRNr查找InfoRecDate

对于第2部分,我将使用子查询:

select 
  SRNr, 
  (select top 1 InfoRecDate from ServiceRequestTasks t2 
    where t1.SRNr = t2.SRNr and InfoRecDate is not null 
    order by InfoRecDate desc) as InfoDate, 
  TaskCreationDate 
from ServiceRequestTasks t1 
where TaskDescr = 'End'

我没有验证这是否可行,但这是一个相当简单的查询-除非我错过了您的要求。

答案 1 :(得分:0)

只需使用条件聚合:

select SRNr,
       max(InfoRecDate) as latest_InfoRecDate,
       max(iif(TaskDescr = "End", TaskCreationDate, NULL)) as end_date
from t
group by SRNr
having sum(iif(TaskDescr = "End", 1, 0)) > 0;