【问题标题】:Create SQL query based on several records?根据多条记录创建 SQL 查询?
【发布时间】:2019-01-29 08:06:55
【问题描述】:

我想获得一个 SQL 查询,它可以让我概述已关闭的服务请求。这基于该服务请求的任务。 几个论坛都帮不上忙:-(

我的表:ServiceRequestTasks

SRNr |任务编号 |任务描述 |任务创建日期 |信息记录日期
0001 | T00000 |开始____ |2018 年 1 月 1 日
0001 | T00001 | SD2C____ | 2018 年 2 月 1 日_______| 2019 年 4 月 1 日
0001 | T00002 | D________ | 2019 年 5 月 1 日
0001 | T00003 |雷______ | 2019 年 6 月 1 日_______| 2019 年 12 月 1 日
0001 | T00004 | SCR_____ | 15/01/2019
0001 | T00005 |雷______ | 16/01/2019______| 22/01/2019
0001 | T00006 | SCR_____ | 28/01/2019
0001 | T00007 |结束______ | 28/01/2019
0002 | T00008 |开始_____ | 2018 年 9 月 1 日
0002 | T00009 | SCR_____ | 2018 年 10 月 1 日
0002 | T00010 | SD2C____ | 11/01/2018_______| 2019 年 12 月 1 日
0002 | T00011 | SCR_____ | 2019 年 13 月 1 日
0002 | T00012 |结束______ | 2018 年 13 月 1 日
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 |雷______ | 2019 年 1 月 2 日________| 2019 年 2 月 2 日
0004 | T00020 | SCR_____ | 2019 年 2 月 2 日
0004 | T00021 |结束______ | 2019 年 7 月 2 日

TaskNr 有唯一的 Id

InfoRecDate 仅在 TaskDescr = (SD2C OR RAI) AND SR 关闭时填写(SR 包含任务描述“结束”)

预期输出:

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

所以是这样的:
SR 编号 | “最新”信息记录日期 |结束日期

1 | 22/01/2019 | 28/01/2019

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

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

【问题讨论】:

    标签: sql database ms-access


    【解决方案1】:

    将要求分为两部分:

    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'
    

    我没有验证这是否有效,但这是一个相当简单的查询 - 除非我遗漏了您的要求中的某些内容。

    【讨论】:

      【解决方案2】:

      只使用条件聚合:

      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;
      

      【讨论】:

        猜你喜欢
        • 2021-11-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多