0

タスク履歴を操作していて、同じレコードに添付された 2 つの日付を見つけようとしています。1) タスクが承認された最新の時刻 (最大承認)。2)当該承認後の最初の提出日。

これが私がこれまでに持っているものです:

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

これは近いですが、タスクが送信されたのはこれが初めてです。別のサブクエリを使用する必要があると確信しています。同じ結果内の列を参照する方法がわかりません。

タスク履歴はこちら。強調表示されているのは、表示しようとしている 2 つの日付です。 ここに画像の説明を入力

4

2 に答える 2

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 > その最大値の場合、その日付の行を選択します。その時点で複数の行がある場合に備えて、トップ 1 を追加しました。あなたのデータでそれが可能かどうかはわかりませんが、安全のために。

于 2015-04-13T19:03:59.017 に答える
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
于 2015-04-13T19:28:33.943 に答える