Создать SQL-запрос на основе нескольких записей? - PullRequest
0 голосов
/ 29 января 2019

Я хотел бы получить SQL-запрос, который дает мне обзор закрытых запросов на обслуживание.Это основано на задачах этого запроса на обслуживание.Несколько форумов не могли помочь: - (

Моя таблица: ServiceRequestTasks

SRNr | TaskNr | TaskDescr | TaskCreationDate | InfoRecDate
0001 | T00000 | Start_____ | 1/01/2018
0001 | T00001 | SD2C____ | 2/01/2018 _______ | 4/01/2019
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_____ | 28/01/201201
0001 | T00007 | Конец ______ | 28/01/2019
0002 | T00008 | Старт _____ | 9/01/2018
0002 | T00009 | SCR_____ | 10/01/2018
0002 | T00010 | SD2C____ |01.11.2008 _______ | 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 |Конец ______ |02.07.2009

TaskNr имеет уникальный идентификатор

InfoRecDate, заполняется только тогда, когда TaskDescr = (SD2C ИЛИ RAI) и SR закрыта (SR содержит описание задачи "End")

Ожидаемый вывод:

  • 1 строка на закрытый SR -> SR содержит задачу с TaskDescr = "End"
  • Последний InfoRecDate на закрытый SR
  • SR закрытdate (= TaskCreationDate of TaskDescr "End")

Так что-то вроде этого:
SR Number |«Последний» InfoRecDate |Дата окончания

1 |22/01/2019 |28 января 2019 года

2 |01.12.2009 |13/01/2018

4 |02.02.2009 |07/02/2019

Ответы [ 2 ]

0 голосов
/ 29 января 2019

Просто используйте условное агрегирование:

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;
0 голосов
/ 29 января 2019

Разбить требования на две части:

  1. Получить все строки, где TaskDescr = 'Конец' (при условии, что на SRNr всегда есть только одна совпадающая строка)
  2. НайдитеInfoRecDate для каждого из этих SRNr

Для части 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'

Я не проверял, работает ли это, но это довольно простой запрос - если толькоЯ что-то упустил в ваших требованиях.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...