从SQL表中获取数据
我有一个包含以下四列的SQL Server表:从SQL表中获取数据,sql,sql-server,Sql,Sql Server,我有一个包含以下四列的SQL Server表: ID, TCname, Status, Date 我将测试用例名称、状态和日期存储在此表中。我想从这个表中得到以下数据 今天添加的新测试用例数。测试用例昨天不存在,但今天存在 测试用例昨天失败,但今天通过了。 同样的测试用例昨天和今天都失败了。 谢谢假设您只是在表中插入新记录,而不是更新旧记录 第一个例子: SELECT COUNT(ID) FROM [TABLE_NAME] WHERE Date >= DATEADD(dd, DATEDI
ID, TCname, Status, Date
我将测试用例名称、状态和日期存储在此表中。我想从这个表中得到以下数据
今天添加的新测试用例数。测试用例昨天不存在,但今天存在
测试用例昨天失败,但今天通过了。
同样的测试用例昨天和今天都失败了。
谢谢假设您只是在表中插入新记录,而不是更新旧记录 第一个例子:
SELECT COUNT(ID) FROM [TABLE_NAME] WHERE Date >= DATEADD(dd, DATEDIFF(dd,0,GETDATE()), 0)
SELECT ID, TCName, Status, Date
FROM [TABLE_NAME]
WHERE TCname IN (SELECT TCname
FROM [TABLE_NAME]
WHERE Date >= DATEADD(dd, DATEDIFF(dd,1,GETDATE()), 0)
AND Date <= DATEADD(dd, DATEDIFF(dd,0,GETDATE()), 0)
AND Status = 'Fail'
)
AND Status = 'Pass'`
SELECT ID, TCName, Status, Date
FROM [TABLE_NAME]
WHERE TCname IN (SELECT TCname
FROM [TABLE_NAME]
WHERE Date >= DATEADD(dd, DATEDIFF(dd,1,GETDATE()), 0)
AND Date <= DATEADD(dd, DATEDIFF(dd,0,GETDATE()), 0)
AND Status = 'Fail'
)
AND Status = 'Fail'`
第二个例子:
SELECT COUNT(ID) FROM [TABLE_NAME] WHERE Date >= DATEADD(dd, DATEDIFF(dd,0,GETDATE()), 0)
SELECT ID, TCName, Status, Date
FROM [TABLE_NAME]
WHERE TCname IN (SELECT TCname
FROM [TABLE_NAME]
WHERE Date >= DATEADD(dd, DATEDIFF(dd,1,GETDATE()), 0)
AND Date <= DATEADD(dd, DATEDIFF(dd,0,GETDATE()), 0)
AND Status = 'Fail'
)
AND Status = 'Pass'`
SELECT ID, TCName, Status, Date
FROM [TABLE_NAME]
WHERE TCname IN (SELECT TCname
FROM [TABLE_NAME]
WHERE Date >= DATEADD(dd, DATEDIFF(dd,1,GETDATE()), 0)
AND Date <= DATEADD(dd, DATEDIFF(dd,0,GETDATE()), 0)
AND Status = 'Fail'
)
AND Status = 'Fail'`
第三个例子:
SELECT COUNT(ID) FROM [TABLE_NAME] WHERE Date >= DATEADD(dd, DATEDIFF(dd,0,GETDATE()), 0)
SELECT ID, TCName, Status, Date
FROM [TABLE_NAME]
WHERE TCname IN (SELECT TCname
FROM [TABLE_NAME]
WHERE Date >= DATEADD(dd, DATEDIFF(dd,1,GETDATE()), 0)
AND Date <= DATEADD(dd, DATEDIFF(dd,0,GETDATE()), 0)
AND Status = 'Fail'
)
AND Status = 'Pass'`
SELECT ID, TCName, Status, Date
FROM [TABLE_NAME]
WHERE TCname IN (SELECT TCname
FROM [TABLE_NAME]
WHERE Date >= DATEADD(dd, DATEDIFF(dd,1,GETDATE()), 0)
AND Date <= DATEADD(dd, DATEDIFF(dd,0,GETDATE()), 0)
AND Status = 'Fail'
)
AND Status = 'Fail'`
假设Date列的类型是Date而不是DATETIME,并且每天都会为当天存在的每个测试用例插入一条记录
这是一把小提琴,您可以验证它是否能正常工作:
假设您的日期列是DATETIME 1.今天添加的新测试用例数量
SELECT COUNT (*) AS [New Test Case Count]
FROM Testcase
WHERE DATE >= DATEADD(dd, 0, DATEDIFF(dd, 0, GETDATE()))
2.昨天失败但今天通过的测试用例
SELECT DISTINCT TCname
FROM Testcase
WHERE TCName IN (SELECT TCName
FROM Testcase t
WHERE Date BETWEEN DATEADD(dd, 0, DATEDIFF(dd, 1, GETDATE()))
AND DATEADD(dd, 0, DATEDIFF(dd, 0, GETDATE()))
AND t.Status = 'FAIL')
AND DATE >= DATEADD(dd, 0, DATEDIFF(dd, 0, GETDATE()))
AND Status = 'PASS'
3.测试用例昨天和今天都失败了
请添加您为解决我在下面尝试过的问题所做的任何尝试,但它会从[TestcaseTb]返回所有失败选择tc_名称,其中状态为“失败”,日期为“2014年9月9日”或日期为“2014年10月9日”,您的数据似乎已非标准化。从我收集的信息来看,如果您有一个名为“testA”的测试用例,那么TCname=“testA”的记录数与测试用例出现的天数相同,对吗?那么,如果testA已经使用了10天,有10条记录吗?我的另一个假设是:Date列的数据类型是Date,而不是DATETIME,对吗?请在您的问题中发布所有数据类型。为什么您接受了一个明显错误的查询作为答案?它选择了目前数据库中存在的所有案例的计数,而通过/失败查询也显然是错误的-这只是简单的逻辑,可以看到它。。。你能正确地验证结果吗?我开始怀疑。。。由于琐碎的数据,一些查询可以在小提琴上正常工作-老实说,我应该发布反例吗?嗨,Pawel,是的,第一个查询选择了今天添加的所有记录。事实上,答案被错误地接受了。你能帮我回答第一个问题吗。我又添加了一列blockname ID、TCname、Status、Date和blockname。我需要这个特定区块的今天日期记录。感谢Osahon,您的第一个和第二个查询工作顺利。但是3查询返回昨天和今天的所有失败测试用例。但我只需要重复的失败测试用例。谢谢Srikanth,您的第一个和第二个查询运行良好。但是第三个查询返回了昨天和今天的所有不同的失败测试用例。您能为您的问题添加一些示例输入和输出数据并解释您想要什么吗?第一个查询中有一些问题。实际上,我需要昨天没有出现的测试用例,新添加的,但是这个查询返回今天添加的总测试用例。