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 的不同方法 - 到目前为止没有任何效果。
任何帮助,将不胜感激。
使用 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)
| 归档时间: |
|
| 查看次数: |
3693 次 |
| 最近记录: |