我们有记录(表1),它们具有通过在子表中插入记录而发生的工作流程(提交,批准等)(表2)。例如,如果提交了Table1中的记录,则会插入Table2中的相应记录,其中包含工作流状态(StatusField),日期和人员提交。当我尝试根据其状态(例如,仅提交的记录)查询Table1时,我试图找出最有效的方法并且不确定。我已经尝试创建函数,其中Table1的PK是参数,然后它从Table2中用匹配的FK踢出最新的Statusfield。我也尝试使用表2的PK为最大PK按FK分组,然后通过LEFT OUTER JOIN链接(因为表2中可能没有相应的记录,这意味着状态正在等待)。看起来更快的方法是做一个像这样的子查询:
SELECT a.*
,(SELECT TOP 1 StatusField
FROM Table2 b
WHERE b.FK=a.PK
ORDER BY b.DateField DESC) StatusField
FROM Table1 a
WHERE (SELECT TOP 1 StatusField
FROM Table2 b
WHERE b.FK=a.PK
ORDER BY b.DateField DESC)='Submitted'
我仍然觉得有更好的方法。有什么想法吗?如果有类似的问题和答案,有人可以指出我,那也是很棒的。谢谢!
答案 0 :(得分:1)
一种可能的解决方案(问题标记为MySQL) - 使用派生表获取每个fk的最大日期字段,然后联接回table2以查看状态字段是否已提交....
select a.*
, b.StatusField
from table1 a
join (select fk
, max(datefield) datefield
from table2
group by fk) max on (max.fk = a.fk)
join table2 b on (b.fk = a.fk and b.datefield = max.datefield) and b.StatusField = 'Submitted');