您好我遇到了这个问题。我试图制作SQL命令,它将在状态为0时选择项目数。
Name | TimeStarted | Status
Job1 | 210161 | 0
Job1 | 210160 | 0
Job1 | 210159 | 0
Job1 | 210158 | 1
Job1 | 210157 | 0
Job2 | 210156 | 1
Job2 | 210155 | 1
Job3 | 210154 | 1
在这个示例中,Select的结果应该是这样的。
Name | Job Count
Job1 | 3
Job2 | 0
此脚本的重点是自上次成功启动以来失败作业的计数。谢谢你的帮助
答案 0 :(得分:2)
您可以尝试此查询:
select t1.Name, count(t2.Name)
from (
select Name, max(TimeStarted) as LastSuccessTime
from TableX
where Status = 1
group by Name
) t1
left join TableX t2
on t1.Name = t2.Name
and t1.LastSuccessTime < t2.TimeStarted
group by t1.Name
演示:SQLFiddle
我确信你可能需要考虑边缘情况,例如,如果一个工作从未有过成功的运行会发生什么,等等。但至少它应该让你去。
修改强>
我实际上认为Gordon Linoff的查询比我的更直截了当。我只是没有意识到它缺少一个很小的条件才能让它正常工作。
以下是他缺少条件的查询,并根据您的数据进行了调整:
select t1.name, count(*) - 1
from tableX t1
where t1.TimeStarted >= (select max(t2.TimeStarted)
from tableX t2
where t2.Name = t1.Name
and t2.status = 1)
group by t1.name;
演示:SQLFiddle
答案 1 :(得分:1)
假设你有一些if id来指定排序:
select name, count(*) - 1
from table t
where t.id <= (select min(id) from table t2 where t2.name = t.name and t2.status <> 0)
group by name;
<=
只是包含没有初始0的行。