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。