Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL计数列值更改_Sql_Sql Server - Fatal编程技术网

SQL计数列值更改

SQL计数列值更改,sql,sql-server,Sql,Sql Server,在DBO[Warehouse_DB].[DBO].[WorkItemHistory]中使用SSMS 2016: 我试图在历史记录列(Owner_ID)中计算时间,它从不在我的组中的值更改为我的组中的值。我的群组是SAG或任何包含prometra的用户名 在下面的例子中(按时间顺序从最老到最新从Joe Schomoe开始),它将计数3。1.第一个凹陷,2。亚历克斯(普罗姆特拉),3岁。第二个凹陷。 Bill(Prometra)不算,因为之前的值是SAG,所以已经是我团队的一部分 TimeStamp

在DBO[Warehouse_DB].[DBO].[WorkItemHistory]中使用SSMS 2016:
我试图在历史记录列(Owner_ID)中计算时间,它从不在我的组中的值更改为我的组中的值。我的群组是SAG或任何包含prometra的用户名

在下面的例子中(按时间顺序从最老到最新从Joe Schomoe开始),它将计数3。1.第一个凹陷,2。亚历克斯(普罗姆特拉),3岁。第二个凹陷。
Bill(Prometra)不算,因为之前的值是SAG,所以已经是我团队的一部分

TimeStamp     Owner_ID 
1:45 AM      Joe Schmoe  
2:45 AM      SAG  
3:36 AM      Bill (Promtera)  
7:15 AM      Bill (Promtera)  
8:56 AM      SOR  
11:30 AM     Sal Smith  
12:45 PM     Alex (Promtera)  
1:45 PM      SOR  
4:45 PM      SAG`

由于您似乎正在使用SQL Server 2016,因此可以使用
LAG()
获取前一行的值,并与当前行进行比较:

CREATE TABLE Log ([TimeStamp] time, [Owner_ID] varchar(15)) ;

INSERT INTO Log
    ([TimeStamp], [Owner_ID])
VALUES
    ('1:45 AM', 'Joe Schmoe'),
    ('2:45 AM', 'SAG'),
    ('3:36 AM', 'Bill (Promtera)'),
    ('7:15 AM', 'Bill (Promtera)'),
    ('8:56 AM', 'SOR'),
    ('11:30 AM', 'Sal Smith'),
    ('12:45 PM', 'Alex (Promtera)'),
    ('1:45 PM', 'SOR'),
    ('4:45 PM', 'SAG');

with ProcesedLog as (
select Owner_ID,
  lag(Owner_ID,1,Owner_ID) over(order by [TimeStamp]) as PreviousID
from Log
)
select sum(case when MyGroup!=PreviousMyGroup and MyGroup=1
                then 1 else 0 end) as ChangesToMyGrpup
from (select
    case when Owner_ID='SAG' or Owner_ID like '%(Promtera)%'
         then 1 else 0 end as MyGroup,
    case when PreviousID='SAG' or PreviousID like '%(Promtera)%'
         then 1 else 0 end as PreviousMyGroup
  from ProcesedLog)
as MyGroups

我不遵循您的逻辑,但我立即发现了一个问题,因为您从未指定使用哪个列来确定什么是“第一”或“第二”;如果你设想一个订单,你必须有一个列来提供它。(1)你需要一个列来指定订单。SQL表表示无序集。(2) 标记一个数据库——可能是SQL Server 2016。编辑以处理注释