你好,我有这个问题。我试图创建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此脚本的要点是自上次成功启动以来失败作业的计数。谢谢你的帮助
发布于 2015-07-30 20:30:18
您可以尝试以下查询:
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
我相信你可能需要考虑一些边缘情况,比如,如果一个工作从来没有成功运行过,会发生什么,等等。但至少它应该让你开始工作。
编辑
我觉得戈登·林诺夫的问题比我的更直截了当。我只是没有意识到,它失去了一个微小的条件,使它正常工作。
下面是他对缺失条件的查询,并适应您的数据:
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
发布于 2015-07-30 20:01:36
假设您有某种类型的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的行。
https://stackoverflow.com/questions/31732837
复制相似问题