2015-04-13 2 views
0

Я работаю с историей задач и пытаюсь найти две даты, прикрепленные к одной записи: 1) В самое последнее время задача была одобрена (одобрено максимум); 2) Первая поданная дата после указанного утверждения.SQL: Найти MIN, но больше MAX

Вот то, что я до сих пор:

Select 
a.assn_uid, 
max(b.ASSN_TRANS_DATE_ENTERED) as LastApprove, 
e.LastSubmitted 

FROM [PRJDEV_ProjectWebApp].[pub].[MSP_ASSIGNMENT_TRANSACTIONS] a 
inner join [PRJDEV_ProjectWebApp].[pub].[MSP_ASSIGNMENT_TRANSACTIONS_COMMENTS] b 
on a.ASSN_TRANS_UID = b.ASSN_TRANS_UID 



join (select c.assn_uid, 
min(d.ASSN_TRANS_DATE_ENTERED) as LastSubmitted 

FROM [PRJDEV_ProjectWebApp].[pub].[MSP_ASSIGNMENT_TRANSACTIONS] c 
inner join [PRJDEV_ProjectWebApp].[pub].[MSP_ASSIGNMENT_TRANSACTIONS_COMMENTS] d 
on c.ASSN_TRANS_UID = d.ASSN_TRANS_UID 

where c.ASSN_UID = '499879BC-28B2-E411-8B0A-00059A3C7A00' 
and d.[ASSN_TRANS_COMMENT_TYPE_ENUM] = 0 

group by c.assn_uid) e 
on e.ASSN_UID = a.ASSN_UID 


where a.ASSN_UID = '499879BC-28B2-E411-8B0A-00059A3C7A00' 
and b.[ASSN_TRANS_COMMENT_TYPE_ENUM] = 1 

group by a.assn_uid, e.LastSubmitted 

Это близко, однако, это дает мне в первый раз когда-либо, что задача была представлена. Я уверен, что мне нужно использовать другой подзапрос, я просто не знаю, как ссылаться на столбец внутри одного и того же результата.

Вот история задачи. Подчеркнуты две даты, которые я пытаюсь показать: enter image description here

ответ

0

С некоторой помощью мы выяснили, что нам нужен дополнительный минимум, обернутый вокруг запроса.

SELECT 
     final.assn_uid, 
     final.LastApprove, 
     min(final.SubmissionDate) FirstSubmitted 
FROM 
     (Select 
     a.assn_uid, 
     max(b.ASSN_TRANS_DATE_ENTERED) as LastApprove, 
     e.SubmittedDates SubmissionDate 

     FROM [PRJDEV_ProjectWebApp].[pub].[MSP_ASSIGNMENT_TRANSACTIONS] a 
     inner join [PRJDEV_ProjectWebApp].[pub].[MSP_ASSIGNMENT_TRANSACTIONS_COMMENTS] b 
     on a.ASSN_TRANS_UID = b.ASSN_TRANS_UID 



     join (select c.assn_uid, 
     (d.ASSN_TRANS_DATE_ENTERED) as SubmittedDates 

     FROM [PRJDEV_ProjectWebApp].[pub].[MSP_ASSIGNMENT_TRANSACTIONS] c 
     inner join [PRJDEV_ProjectWebApp].[pub].[MSP_ASSIGNMENT_TRANSACTIONS_COMMENTS] d 
     on c.ASSN_TRANS_UID = d.ASSN_TRANS_UID 

     where c.ASSN_UID = '499879BC-28B2-E411-8B0A-00059A3C7A00' 
     and d.[ASSN_TRANS_COMMENT_TYPE_ENUM] = 0 

     ) e 
     on e.ASSN_UID = a.ASSN_UID 


     where a.ASSN_UID = '499879BC-28B2-E411-8B0A-00059A3C7A00' 
     and b.[ASSN_TRANS_COMMENT_TYPE_ENUM] = 1 
     and e.SubmittedDates > b.ASSN_TRANS_DATE_ENTERED 

     group by a.assn_uid, e.SubmittedDates) Final 

GROUP BY 
     final.assn_uid, 
     final.LastApprove 
0

Я не знаю, что я мог пробираться через ваш запрос за разумные промежутки времени, но чтобы получить строку после определенной строки, вам понадобится чтобы сделать что-то вроде этого:

create table #submissions (
     ID int, 
     DateAdded datetime, 
     SubmissionType nvarchar(100) 
    ) 
insert #submissions values 
    (1, '2010-01-01', 'first ever'), 
    (1, '2010-01-02', 'second'), 
    (1, '2010-01-03', 'third'), 
    (1, '2010-01-04', 'approve'), 
    (1, '2010-01-05', 'first after approve'), 
    (1, '2010-01-06', 'second after approve'), 
    (1, '2010-01-07', 'third after approve') 

declare @lastApprovalDate datetime 

select @lastApprovalDate = MAX(DateAdded) 
    from #submissions 
    where 
     SubmissionType = 'approve' 

declare @firstAfterApprovalDate datetime 
select @firstAfterApprovalDate = MIN(DateAdded) 
    from #submissions 
    where 
     DateAdded > @lastApprovalDate 

select * 
    from #submissions 
    where 
     DateAdded = @firstAfterApprovalDate 

drop table #submissions 

в общем, получить последнюю дату утверждения с помощью MAX(), а затем получить первую дату после этой даты, используя MIN(), где DateAdded>, что максимум, а затем выберите строку в эта дата. Я добавил Top 1, на тот случай, если в это время будет несколько строк. Не уверен, что это возможно в ваших данных, но просто для того, чтобы быть в безопасности.

Смежные вопросы