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,我有一个包含以下四列的SQL Server表: ID, TCname, Status, Date 我将测试用例名称、状态和日期存储在此表中。我想从这个表中得到以下数据 今天添加的新测试用例数。测试用例昨天不存在,但今天存在 测试用例昨天失败,但今天通过了。 同样的测试用例昨天和今天都失败了。 谢谢假设您只是在表中插入新记录,而不是更新旧记录 第一个例子: SELECT COUNT(ID) FROM [TABLE_NAME] WHERE Date >= DATEADD(dd, DATEDI

我有一个包含以下四列的SQL Server表:

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,您的第一个和第二个查询运行良好。但是第三个查询返回了昨天和今天的所有不同的失败测试用例。您能为您的问题添加一些示例输入和输出数据并解释您想要什么吗?第一个查询中有一些问题。实际上,我需要昨天没有出现的测试用例,新添加的,但是这个查询返回今天添加的总测试用例。