首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL选择直到value = my value

SQL选择直到value = my value
EN

Stack Overflow用户
提问于 2015-07-30 19:52:40
回答 2查看 612关注 0票数 0

你好,我有这个问题。我试图创建SQL命令,以便在获得状态0时选择项目计数。

代码语言:javascript
复制
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的结果应该如下所示。

代码语言:javascript
复制
Name  | Job Count
Job1  |     3 
Job2  |     0

此脚本的要点是自上次成功启动以来失败作业的计数。谢谢你的帮助

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-07-30 20:30:18

您可以尝试以下查询:

代码语言:javascript
复制
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

我相信你可能需要考虑一些边缘情况,比如,如果一个工作从来没有成功运行过,会发生什么,等等。但至少它应该让你开始工作。

编辑

我觉得戈登·林诺夫的问题比我的更直截了当。我只是没有意识到,它失去了一个微小的条件,使它正常工作。

下面是他对缺失条件的查询,并适应您的数据:

代码语言:javascript
复制
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

票数 2
EN

Stack Overflow用户

发布于 2015-07-30 20:01:36

假设您有某种类型的if id来指定排序:

代码语言:javascript
复制
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的行。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31732837

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档