所以我有dbo.Table1,其中包含ID,ColA,ColB,ColC。
我也有audit.Table1,其中包含AuditID,AuditDate,AuditUserID,AuditType,ID,ColA,ColB,ColC。
AuditType是I,U或D(用于插入,更新或删除)。
我要寻找的结果是一个查询,我根据where子句为我提供Table1中的每个记录,还为我提供了从audit.Table1表中提取的Last Modified信息(最新的“ U”值用于ID),主要是我想要日期和AuditUserID,因此我可以通过so&so用户拉出一个关于此类日期的基本Last Modified。
我尝试使用Cross Apply,但是当查询在30秒后仍在运行时,我就停止了这种想法。
在某些情况下,没有'U'记录(仅创建记录,未进行任何更改)。
答案 0 :(得分:0)
目前还不清楚您正在做什么。但可以肯定的是,您可以沿这些方式使用某些东西。
create table Table1
(
ID int identity
, ColA varchar(10)
, ColB varchar(10)
, ColC varchar(10)
)
insert Table1
select 'Col1', 'Col2', 'Col3'
insert Table1
select 'This', 'has', 'no update'
create table AuditTable1
(
AuditID int identity
, AuditDate datetime
, AuditUserID int
, AuditType char(1)
, ID int
, ColA varchar(10)
, ColB varchar(10)
, ColC varchar(10)
)
insert AuditTable1
select getdate()
, 9 --just some number
, 'U'
, 1
, 'Col1'
, 'Col2'
, 'Col3'
select t.*
, x.AuditID
, x.AuditDate
, x.AuditUserID
from Table1 t
outer apply
(
select top 1 AuditID
, AuditDate
, AuditUserID
from AuditTable1 at1
where at1.ID = t.ID
order by at1.AuditDate desc
) x
答案 1 :(得分:0)
因此,在进一步研究之后,我可以通过创建一个过渡的左联接使所有工作正常进行,该联接只给了我最后一个被触摸条目的AuditID#...并且如果AuditUserID在我的左联接中为null,则我知道自创建以来尚未对其进行修改。所以我的最终查询基本上是...
SELECT [fields wanted from Courses table],
IIF(ISNULL(ac.AuditUserID,0) = 0, [make created by info], [make modified info]) as LastModInfo
FROM dbo.Courses c
LEFT JOIN (select MAX(AuditID), CourseID from audit.Courses group by CourseID) mid
ON mid.CourseID = c.CourseID
LEFT JOIN audit.Course ac on ac.AuditID = mid.AuditID AND ac.AuditType = 'U'
感谢@seanlange的尝试