2017-09-13 105 views
-2

如截圖所示,對於不同的id,我想選擇所有具有公共updateTime的行。例如,在這裏,所有三個ID都具有相同的updateTime 9:30:02和9:30:04。因此,我想選擇第3行和第4行(對於id 211709),第6和第8行(對於id 301801),第9和第10行(對於id 931801),我想選擇所有這6行。我應該寫什麼sql代碼?提前致謝!!!T-SQL,選擇行

+0

任何人,任何解決方案?請幫忙,謝謝! – Michael

回答

3

當你需要返回只更新時間這是所有 ID的共同點,你可以使用這樣的查詢:

SELECT * FROM MyTable WHERE UpdateTime IN (
    SELECT DISTINCT UpdateTime 
    FROM MyTable 
    GROUP BY UpdateTime 
    HAVING (SELECT COUNT(DISTINCT c.Id) FROM MyTable c WHERE c.UpdateTime = UpdateTime) = COUNT(DISTINCT Id) 
) 

如果您想知道HAVING子句的作用 - 對於每個UpdateTime您檢查具有此UpdateTime的ID的數量是否等於ID的總數。

+0

謝謝大家,很好的幫助! – Michael

1

該查詢會給你所發生的所有更新時間不止一次

Select UpdateTime 
From MyTable 
Group By UpdateTime 
Having Count (*) > 1 

使用此作爲一個子查詢

Select * 
From MyTable 
Where UpdateTime IN 
(
    Select UpdateTime 
    From MyTable 
    Group By UpdateTime 
    Having Count (*) > 1 
) 
+0

愚蠢的問題......'9:30:00'會出現在這裏,因爲它有一個'Count> 1'? OP只查找'9:30:02'和'9:30:04' – Simon

+0

9:30:00不應該在這裏顯示,因爲ID 931801沒有updateTime – Michael

+0

任何解決方案?謝謝! – Michael