簡體   English   中英

SQL Server帶有時間戳的內部聯接:每個記錄僅分配一次嗎?

[英]SQL Server Inner Join with Timestamps: is each record only assigned once?

我正在處理帶時間戳的記錄,並且需要根據時間戳差異進行內部聯接。 我一直在使用DATEDIFF函數,它似乎運行良好。 但是,時間戳之間的時間量會有所不同。 為了澄清起見,有時記錄在表2中出現的時間與表1的秒數相同,有時表2中的記錄要比表1中的記錄晚15秒。表1中的記錄始終帶有表2的時間戳。沒有其他我可以加入的通用字段,但是在每個表中都有一個寄存器號,我通過確保寄存器相同來提高准確性。

我的問題是:如果我增加時間戳差來進行內部聯接(例如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;

您可以交叉應用到附近的最近記錄。 但是,這絕對不是理想的,如果同時寫入多個記錄怎么辦? 您也許應該給第一個表一個標識字段,然后用scopeidentity更新下一個表

SELECT *

INTO AtriumSequoiaJoin5

FROM Atrium CROSS APPLY
    (SELECT TOP 1 * FROM Sequoia WHERE 
            Atrium.Reader = Sequoia.theader_pos_name 
            ORDER BY Datediff(millisecond,[Atrium].[Date2],[Sequoia].[theader_tdatetime])) DQ

ORDER BY Sequoia.theader_id;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM