请求编写聚合查询:统计近7天更新失败达5次的设备信息
数据库查询需求及解决方案
样本数据表
| ComputerID | UpdateID | ActionDate | Result |
|---|---|---|---|
| 1234 | AA-AA | 5/1/2023 5PM | 4 |
| 5678 | CC-CC | 5/1/2023 1AM | 4 |
| 1234 | AA-AA | 5/2/2023 7AM | 4 |
| 1234 | CC-CC | 5/1/2023 10AM | 1 |
| 5678 | CC-CC | 5/1/2023 10AM | 4 |
| 1234 | AA-AA | 5/1/2023 1PM | 4 |
| 5678 | EE-EE | 5/1/2023 7PM | 1 |
| 1234 | AA-AA | 5/3/2023 9PM | 4 |
| 1234 | BB-BB | 5/1/2023 11AM | 1 |
| 5678 | CC-CC | 5/1/2023 4PM | 4 |
| 5678 | BB-BB | 5/2/2023 7AM | 1 |
| 1234 | BB-BB | 5/2/2023 11AM | 1 |
| 5678 | AA-AA | 5/4/2023 4PM | 1 |
| 5678 | CC-CC | 5/2/2023 7AM | 4 |
| 5678 | CC-CC | 5/3/2023 11AM | 4 |
| 1234 | AA-AA | 5/4/2023 4PM | 4 |
| 1234 | CC-CC | 5/4/2023 7AM | 4 |
以上是用于编写查询的数据库样本,目前不确定如何编写符合需求的查询语句。
需求说明
- 统计过去7天内,某一更新失败次数达到5次的计算机(ComputerID)、对应的更新ID(UpdateID)以及具体失败次数。
- ComputerID:计算机标识
- UpdateID:更新标识
- ActionDate:更新运行的时间戳
- Result:结果(4 = 更新失败)
- 假设当前日期为2023年5月5日
期望查询结果
| ComputerID | UpdateID | FailedCount |
|---|---|---|
| 1234 | AA-AA | 5 |
| 5678 | CC-CC | 6 |
解决方案
通用SQL语句(适配MySQL、PostgreSQL等)
SELECT ComputerID, UpdateID, COUNT(*) AS FailedCount FROM 你的表名 WHERE Result = 4 AND ActionDate >= DATE_SUB('2023-05-05', INTERVAL 7 DAY) AND ActionDate <= '2023-05-05' GROUP BY ComputerID, UpdateID HAVING COUNT(*) >= 5;
SQL Server适配版本
SELECT ComputerID, UpdateID, COUNT(*) AS FailedCount FROM 你的表名 WHERE Result = 4 AND ActionDate >= DATEADD(DAY, -7, '2023-05-05') AND ActionDate <= '2023-05-05' GROUP BY ComputerID, UpdateID HAVING COUNT(*) >= 5;
逻辑说明
- WHERE子句:先筛选出更新失败(Result=4)且时间在过去7天内的数据;
- GROUP BY子句:按
ComputerID和UpdateID分组,统计每组的失败次数; - HAVING子句:筛选出失败次数≥5的分组,得到符合需求的结果。
内容的提问来源于stack exchange,提问作者TobeJex
相关产品推荐
相关产品推荐

