T-SQL,选择行

问题描述:

如截图所示,对于不同的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

当你需要返回只更新时间这是所有 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

该查询会给你所发生的所有更新时间不止一次

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