簡體   English   中英

SQL - 僅獲取列項之間具有最小增量時間的行

[英]SQL - get only row with min delta time between columns Items

在這里,我有Table1 ,它有兩列時間; Time1 1 和Time2
Time1對於給定的Item是相同的,而Time2取決於Code
對於每個項目,我只需要 delta Abs( Time2 - Time1 ) 最低的行。

在此處輸入圖像描述

哪些是以下行:

在此處輸入圖像描述

在 DeltaTime 上使用 Rank() window function,然后在外部查詢中過濾 rank=1。

Select * From (
    Select Item, Time1, Code, Time2, DeltaTime,
        Rank() Over (Partition By Item Order By DeltaTime) as TimeRank
    From Table1
    )
Where TimeRank=1

如果有最低的平局,這將報告兩條記錄。 如果您只想要一條記錄以防出現平局,則將 row_number() function 替換為 rank() function。

或者,

您可以像這樣使用相關子查詢:

Select * From Table1 X
Where DeltaTime= (Select min(DeltaTime) From Table1 Y
                  Where X.Item=Y.Item)

這稍微更緊湊且更易於閱讀,但許多 DBMS 實現無法有效地執行它們。

如果我正確理解您的問題並且第一張圖片是您擁有的表格,您可以執行以下操作:

SELECT * FROM Table1 GROUP BY Item HAVING min(DeltaTime);

如果我正確理解您的問題並且第一張圖片是您擁有的表格,您可以執行以下操作:

SELECT * FROM Table1 GROUP BY Item HAVING min(DeltaTime);

暫無
暫無

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

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