ビジネスルール:フォローアップイベントの請求は90日ごとにのみ可能です。前のイベントから90日以内に発生したイベントは請求できませんが、記録する必要があります。
ユーザー要件:最後のイベント請求書が提出された日付を、現在のイベントの請求書を提出するタブで確認し、請求書を提出する価値があるかどうかを視覚的に確認したいと考えています。
イベントには、テーブルイベントにevent_idとevent_dateがあります。Event_idは、請求書のsubmited_dateを持つテーブルevent_billの外部キーです。イベントには、顧客ごとに外部キーcustomer_idがあるため、顧客は任意の期間に複数のイベントを持つことができます。
現在のevent_idとcustomer_idを指定して、最新の前のイベントのsubmited_dateを取得しようとしています。
これが私が試したことです:
SELECT TOP 1 (event_id) as prev_event_id
INTO #tmp
FROM event
WHERE customer_id = @custID
AND event_type = 'Followup'
AND event_id < @eventID
ORDER BY event_date DESC
SELECT eb.submitted_date
FROM event_bill eb
JOIN #tmp
ON eb.event_id = #tmp.prev_event_id
DROP TABLE #tmp
これはすべてうまくいくでしょうが、私のアプリケーションのデータベース権限では一時テーブルの作成が許可されていません。
一時テーブルを使用せずに試行すると、派生テーブルでORDER BYを使用できないというエラーが発生しましたが、この顧客の現在のイベントより前の最後のイベントを確実に取得するために必要です。
SELECT eb.submitted_date
FROM event_bill eb
JOIN
(
SELECT TOP 1 (event_id) as prev_event_id
FROM event
WHERE customer_id = @custID
AND event_type = 'Followup'
AND event_id < @eventID
ORDER BY event_date DESC
) x
ON eb.event_id = x.prev_event_id
誰かが私にこれにアプローチするためのより良い方法を教えてもらえますか?