Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.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 server 使用SQL Server 2000获取最大尝试次数_Sql Server_Extract_Sql Server 2000 - Fatal编程技术网

Sql server 使用SQL Server 2000获取最大尝试次数

Sql server 使用SQL Server 2000获取最大尝试次数,sql-server,extract,sql-server-2000,Sql Server,Extract,Sql Server 2000,如何获得user_字段从给定代码集中获取或达到代码的最大尝试次数(82,83) 也就是说,如果user\u字段第一次找到代码82或83,则应打印user\u字段的尝试次数,依此类推 表1为实际数据表,表2为预期输出表 表1: User_Field | code ------------------- 100 | 13 100 | 16 100 | 13 100 | 82 98 | 52 35 | 13 9

如何获得
user_字段
从给定代码集中获取或达到代码的最大尝试次数(82,83)

也就是说,如果
user\u字段
第一次找到代码82或83,则应打印
user\u字段
的尝试次数,依此类推

表1为实际数据表,表2为预期输出表

表1:

User_Field |  code
-------------------
100        | 13
100        | 16
100        | 13
100        | 82
 98        | 52
 35        | 13
 98        | 82
 35        | 83
 35        | 16
 35        | 82
User_field | attempts | first_matchcode_in_the_given_codeset
------------------------------------------------------------
100        | 4        | 82
 98        | 2        | 82
 35        | 2        | 83
以及表2中的预期输出:

User_Field |  code
-------------------
100        | 13
100        | 16
100        | 13
100        | 82
 98        | 52
 35        | 13
 98        | 82
 35        | 83
 35        | 16
 35        | 82
User_field | attempts | first_matchcode_in_the_given_codeset
------------------------------------------------------------
100        | 4        | 82
 98        | 2        | 82
 35        | 2        | 83
试试这个

DECLARE @TABLE1  TABLE
(
    SeqNo INT,User_Field INT,  code INT
)
 INSERT INTO @TABLE1 
 SELECT 1,100        , 13 UNION ALL
  SELECT 2,100        , 16 UNION ALL
 SELECT 3,  100        , 13 UNION ALL
 SELECT 4,  100        , 82 UNION ALL
 SELECT 5,   98        , 52 UNION ALL
 SELECT 6,   35        , 13 UNION ALL
 SELECT 7,   98        , 82 UNION ALL
 SELECT 8,   35        , 83 UNION ALL
 SELECT 9   , 35        , 16 UNION ALL
 SELECT 10,  35        , 82 

;WITH CTE AS(
            SELECT User_Field,Code,ROW_NUMBER() OVER( PARTITION BY  User_Field  ORDER BY SeqNo) Attempts FROM @TABLE1
            ) 
, CTE2 AS
        (
            SELECT User_Field,Code,Attempts,ROW_NUMBER() OVER( PARTITION BY  User_Field  ORDER BY User_Field) Nos FROM CTE WHERE CODE IN (83,82)
        )
SELECT User_Field,Code,Attempts
FROM CTE2 
WHERE  Nos =1
我认为这将适用于SQLServer2000

SELECT T1.User_Field,
       COUNT(T1.SeqNo) Attempts,
       (SELECT CODE FROM @TABLE1 WHERE SeqNo = T2.SeqNo AND User_Field = T1.User_Field) CODE 
FROM 
    @TABLE1 T1 
    INNER JOIN
    (
        SELECT User_Field,MIN(SeqNo) SeqNo
        FROM @TABLE1 T1
        WHERE CODE = 83 OR CODE = 82
        GROUP BY User_Field
    ) T2 ON  T2.User_Field = T1.User_Field AND T1.SeqNo <= T2.SeqNo             
GROUP BY T1.User_Field,T2.SeqNo
选择T1.User\u字段,
计数(T1.序号)尝试次数,
(从@TABLE1中选择代码,其中SeqNo=T2.SeqNo和User_字段=T1.User_字段)代码
从…起
@表1 T1
内连接
(
选择用户字段,最小值(序号)序号
来自@TABLE1 T1
其中代码=83或代码=82
按用户分组\u字段

)T2.User_字段上的T2=T1.User_字段和T1.SeqNo如果用户在成功后再次失败,这些是否也应计算在内?若并没有,是否有一个日期或类似的列标识尝试的时间顺序?此外,如果用户从未成功过怎么办?我们是否显示了该用户?StuartLC,一旦用户成功,应打印尝试次数,并跳过进一步迭代,开始处理下一个用户_字段。没有确定的时间或日期。如果用户从未成功,则尝试应为“0”。请尝试我的第二个想法…针对seq server 2000。