我與時間戳記錄工作,需要做一個內部聯接基於時間戳差異。我一直在使用DATEDIFF
函數,它似乎運行良好。但是,時間戳之間的時間量會有所不同。爲了澄清,有時記錄出現在表2中的相同的第二內如表1,有時在表2中記錄要由記錄後面15秒錶1表1中的記錄表2.前總是時間戳並不是我可以加入的其他常見字段,但是每個表中都有一個寄存器編號,用於通過確保寄存器相同來提高準確性。SQL Server內部加入時間戳:每個記錄只分配一次?
我的問題是:如果我增加時間戳差異做內部聯接(例如,DATEDIFF
= 1或2或3 ...或15)將只記錄一次嗎?或者我的表格是否包含來自表1的重複記錄(例如,記錄1與表2中的記錄4連接,其中差異是4秒,並且還與來自表2的記錄7連接,差異是11秒)?
的原因,我的發言現在的工作是沒有寄存器有不到6秒記錄之間,所以即使有多個時間點,將匹配,寄存器的匹配消除了這個問題。
我聲明目前正在爲:
SELECT *
INTO AtriumSequoiaJoin5
FROM Atrium INNER JOIN Sequoia ON Atrium.Reader = Sequoia.theader_pos_name
WHERE (
((DateDiff(s,[Atrium].[Date2],[Sequoia].[theader_tdatetime]))=0
Or (DateDiff(s,[Atrium].[Date2],[Sequoia].[theader_tdatetime]))=1
Or (DateDiff(s,[Atrium].[Date2],[Sequoia].[theader_tdatetime]))=2
Or (DateDiff(s,[Atrium].[Date2],[Sequoia].[theader_tdatetime]))=3
Or (DateDiff(s,[Atrium].[Date2],[Sequoia].[theader_tdatetime]))=4
Or (Datediff(s,[Atrium].[Date2],[Sequoia].[theader_tdatetime]))=5)
)
ORDER BY Sequoia.theader_id;
注意:您可以只使用'則DateDiff(S,[中庭] [日期2],[紅杉] [theader_tdatetime] )在0和5之間而不是這個長的WHERE語句。即使你使用秒的間隔(0到5),它已經可以從「Sequoia」表中加入多於1行。 – gofr1
我猜測,通過時間戳你是指日期時間值?由於時間戳是sql服務器中的一種數據類型,與一天中的時間無關,所以要小心。 –
爲什麼在這裏使用所有這些OR謂詞?爲什麼不簡單地使用範圍而不是一遍又一遍地檢查相同的值?您的整個where子句可以輕鬆簡化爲單個謂詞。無論如何,像這樣加入這個網站很容易出錯。你真的應該有更好的連接行的方法,然後假設日期很近。這是外鍵被設計用於的。 –