要求.
选择与最近审核记录匹配且其创建日期已超过 6 个月的所有非活动规则 (Rule_table.Status),其中audit_text='status_change'。
在上面的示例中,有 2 个审核记录处于非活动状态,查询不应选择 Rule_id 4 作为其最后一个审核记录,其中audit_text“Status_Change”仅一个月前。
下面是我尝试过的 SQL(Microsoft SQL 服务器- TSQL)
select R.Id, A.created_date from Rule R
join Rule_Audit A on R.id=A.id
where R.ID= (
select top1 1 ID from Rule_Audit where Rule_Id=R.Rule_Id and created_date < dateadd
(MONTH, -7, GETDATE()) order by created_date desc
)
and R.status='Inactive'
但是这个查询给出的结果是规则 ID 4,因为上面的查询匹配其审计记录 100。有人可以帮助我正确的查询吗
您应该以文本格式添加一些测试数据,但类似这样的东西可能会起作用:
SELECT R.Id, x.created_date
FROM [RULE] R
CROSS APPLY (
SELECT TOP 1 A.*
FROM Rule_Audit A
WHERE A.id = R.id
AND A.audit_text='status_change'
ORDER BY A.created_date DESC
) x
WHERE x.created_date < dateadd(MONTH, -7, GETDATE())
AND R.status='Inactive'
这样,您首先获得最新的规则审核,然后在 APPLY 获取之外获得,因此它至少有 7 个月的历史了