业务规则:我们只能每 90 天为后续事件计费。任何发生在前一个事件之后不到 90 天的事件都不能计费,但需要记录下来。
用户要求:他们希望在提交当前事件账单的选项卡上查看上次事件账单提交的日期,以直观地提示提交账单是否值得。
事件在表事件中有一个 event_id 和一个 event_date。event_id 是表 event_bill 中的外键,其中包含账单的提交日期。事件对于每个客户都有一个外键 customer_id,因此一个客户可以在任何时间段内有多个事件。
鉴于当前的 event_id 和 customer_id,我正在尝试获取最近一次活动的提交日期。
这是我尝试过的:
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
谁能给我一个更好的方法来解决这个问题?