T-SQL,选择行

时间:2017-09-13 15:57:18

标签: sql sql-server tsql select ssms

如截图所示,对于不同的id,我想选择所有具有公共updateTime的行。例如,这里所有三个ID都有共同的updateTime 9:30:02和9:30:04。因此,我想选择第3行和第4行(对于id 211709),第6行和第8行(对于id 301801),第9行和第10行(对于id 931801),我想选择所有这6行。我应该写什么SQL代码?在此先感谢!!!

2 个答案:

答案 0 :(得分: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的总数。

答案 1 :(得分: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
)