根据关闭时间在唯一条件下插入具有多个连接的表

时间:2014-08-14 19:09:36

标签: sql sql-server sql-server-2008

我有一个包含多个连接的插入语句。但是,最后一个连接(表ItemMulitplers)并没有真正与其他表“绑定”。它们只是此表中的乘数,没有唯一的标识或与其他人的连接。唯一的东西是这张桌子的时间戳。

我在这个表中有5行,而我的脚本占用了所有五行。我需要它只选择一个并将其从名为ItemsProduced的表中的最近时间开始。它们在同一时间执行但不在同一毫秒级别执行。任何帮助非常感谢谢谢

insert into KLNUser.dbo.ItemLookup  (ItemNumber, Cases, [Description], [Type], Wic, Elc,    totalelc,  Shift, [TimeStamp])


    select  a.ItemNumber, b.CaseCount,b.ItemDescription, b.DivisionCode, b.WorkCenter, b.LaborPerCase, a.CaseCount* b.LaborPerCase* c.IaCoPc, a.shift, a.TimeStamp from ItemsProduced a 

       inner join MasterItemList b on a.ItemNumber = b.itemnumber
       inner join ItemMultipliers c on c.MultiplyTimeStamp <=a.Timestamp Interval 1        seconds


    where not exists (select *  from ItemLookup where ItemNumber = a.ItemNumber and Cases = b.CaseCount and [TimeStamp] = a.TimeStamp)

1 个答案:

答案 0 :(得分:1)

我认为最简单的方法是cross apply

select  a.ItemNumber, b.CaseCount,b.ItemDescription, b.DivisionCode, b.WorkCenter, b.LaborPerCase, a.CaseCount* b.LaborPerCase* c.IaCoPc, a.shift, a.TimeStamp
from ItemsProduced a inner join
     MasterItemList b
     on a.ItemNumber = b.itemnumber cross apply
     (select top 1 *
      from ItemMultipliers c
      where c.MultiplyTimeStamp < a.Timestamp
      order by c.MultiplyTimeStamp desc
     ) c
where not exists (select *  from ItemLookup where ItemNumber = a.ItemNumber and Cases = b.CaseCount and [TimeStamp] = a.TimeStamp)