Sql-如何计算由另一列分组的不同列值

Lil*_*h F 5 sql sql-server group-by

我有以下问题 - 我有一个包含 4 列的表:Id、Name、InsertTime、UpdateTime。我想计算每个名称(不是唯一的!)有多少个具有相同名称的具有不同的InsertTime 或 UpdateTime。例如,如果我有以下数据:

ID NAME  INSERTED_TIME  UPDATE_TIME
1  maya  21-12-2015     21-12-2015
2  tal   22-12-2015     21-12-2015
3  maya  21-09-2015     21-12-2015
4  mark  21-12-2015     21-12-2015
5  mark  21-12-2015     21-12-2015
Run Code Online (Sandbox Code Playgroud)

我希望结果是:

NAME  COUNT
maya  1
tal   0
mark  0
Run Code Online (Sandbox Code Playgroud)

解释:“maya”有 1 个具有不同 InsertTime 或 UpdateTime 的重复项。“tal”没有重复项。“mark”有一个重复项,但 InsertTime 和 UpdateTime 相同,因此不算在内。

我努力了:

SELECT COUNT(*)
FROM table t1
JOIN table t2 on t1.NAME=t2.NAME
where (t1.INSERTED_TIME<>t2.INSERTED_TIME or t1.UPDATE_TIME<>t2.UPDATE_TIME)
Run Code Online (Sandbox Code Playgroud)

但这会返回重复项。我还尝试了 GROUP BY 的不同方法 - 到目前为止没有任何效果。

任何帮助,将不胜感激。

t-c*_*.dk 4

使用 GROUP BY 并计算每个名称的行数:

;WITH CTE as
(
  SELECT NAME
  FROM yourtable
  GROUP BY NAME, INSERTED_TIME, UPDATE_TIME
)
SELECT NAME, count(*) - 1 COUNT
FROM CTE
GROUP BY NAME
Run Code Online (Sandbox Code Playgroud)

结果:

NAME    COUNT
mark    0
maya    1
tal     0
Run Code Online (Sandbox Code Playgroud)