SQL选择直到值=我的值
你好,我有这个问题。我正在尝试生成SQL命令,该命令将在状态为0时选择项目计数SQL选择直到值=我的值,sql,sql-server,Sql,Sql Server,你好,我有这个问题。我正在尝试生成SQL命令,该命令将在状态为0时选择项目计数 Name | TimeStarted | Status Job1 | 210161 | 0 Job1 | 210160 | 0 Job1 | 210159 | 0 Job1 | 210158 | 1 Job1 | 210157 | 0 Job2 | 210156 | 1 Job2 | 2
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
此脚本的要点是计算自上次成功启动以来失败作业的数量。感谢您的帮助假设您有某种排序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;
选择名称,计数(*)-1
来自表t
其中t.id假设您有某种排序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;
选择名称,计数(*)-1
来自表t
其中t.id假设您有某种排序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;
选择名称,计数(*)-1
来自表t
其中t.id假设您有某种排序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;
选择名称,计数(*)-1
来自表t
其中t.id您可以尝试以下查询:
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
演示:您可以尝试以下查询:
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
演示:您可以尝试以下查询:
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
演示:您可以尝试以下查询:
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
演示:请用您正在使用的数据库标记您的问题。SQL表表示无序集。因此,表没有排序。对,您有一个排序标准?所有行都具有相同的TimeStarted
值是否正常?我原以为TimeStarted
会定义行的顺序。但是根据你的样本数据,看起来不是那样的。是的,那是我犯的错误。这只是样本数据。这些项目是按名称和开始时间排序的。请使用您正在使用的数据库标记您的问题。SQL表表示无序集。因此,表没有排序。对,您有一个排序标准?所有行都具有相同的TimeStarted
值是否正常?我原以为TimeStarted
会定义行的顺序。但是根据你的样本数据,看起来不是那样的。是的,那是我犯的错误。这只是样本数据。这些项目是按名称和开始时间排序的。请使用您正在使用的数据库标记您的问题。SQL表表示无序集。因此,表没有排序。对,您有一个排序标准?所有行都具有相同的TimeStarted
值是否正常?我原以为TimeStarted
会定义行的顺序。但是根据你的样本数据,看起来不是那样的。是的,那是我犯的错误。这只是样本数据。这些项目是按名称和开始时间排序的。请使用您正在使用的数据库标记您的问题。SQL表表示无序集。因此,表没有排序。对,您有一个排序标准?所有行都具有相同的TimeStarted
值是否正常?我原以为TimeStarted
会定义行的顺序。但是根据你的样本数据,看起来不是那样的。是的,那是我犯的错误。这只是样本数据。这些项目是按名称和开始时间排序的。Wll我有ID,但它们是varchar值,如“42D03061-0CB1-4D2E-80C2-5D7E9D894F77”,因此不能按ID排序。只有包含数字的值是获得时间戳值的作业时间和作业日期。我认为这是最好的解决方案。但是,子查询缺少以下条件:和t2.name=t.name
@sstan。谢谢。Wll我有ID,但它们是varchar值,如“42D03061-0CB1-4D2E-80C2-5D7E9D894F77”,所以不能按ID排序。只有包含数字的值是获得时间戳值的作业时间和作业日期。我认为这是最好的解决方案。但是,子查询缺少以下条件:和t2.name=t.name
@sstan。谢谢。Wll我有ID,但它们是varchar值,如“42D03061-0CB1-4D2E-80C2-5D7E9D894F77”,所以不能按ID排序。只有包含数字的值是获得时间戳值的作业时间和作业日期。我认为这是最好的解决方案。但是,子查询缺少以下条件:和t2.name=t.name
@sstan。谢谢。Wll我有ID,但它们是varchar值,如“42D03061-0CB1-4D2E-80C2-5D7E9D894F77”,所以不能按ID排序。只有包含数字的值是获得时间戳值的作业时间和作业日期。我认为这是最好的解决方案。但是,子查询缺少以下条件:和t2.name=t.name
@sstan。谢谢。谢谢。这正是我想要的。我编辑了我的答案,加入了戈登·林诺夫的问题的固定版本。我认为他的方法比我最初的答案更清晰。谢谢你,这正是我想要的。我编辑了我的答案,加入了戈登·林诺夫的问题的固定版本。我认为他的方法比我最初的答案更清晰。谢谢你,这正是我想要的。我编辑了我的答案,加入了戈登·林诺夫的问题的固定版本。我认为他的方法比我最初的答案更清晰。谢谢你,这正是我想要的。我编辑了我的答案,加入了戈登·林诺夫的问题的固定版本。我认为他的方法比我最初的答案更清晰。