得到的數據我有這四列的SQL Server表:從SQL表
ID, TCname, Status, Date
我存儲在該表中的測試用例名稱和狀態和日期。我想從下面的表格中獲取數據。
- 沒有新的測試案例加入今天(測試用例不存在,但昨天今天在座)
- 測試用例失敗,但昨天今天通過。
- 相同測試用例昨天和今天失敗。
感謝
得到的數據我有這四列的SQL Server表:從SQL表
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'`
謝謝Osahon,您的第一個和第二個查詢沒有任何問題。但3個查詢返回昨天和今天所有失敗的測試用例。但我只需要重複失敗測試用例。 – 2014-09-10 18:58:19
假設Date
列的類型是DATE
(未DATETIME
),並且每每天爲每個t插入一條記錄EST情況下(即存在的那一天,很明顯)
這裏是一個小提琴,所以你可以驗證它的工作原理是,你需要:http://sqlfiddle.com/#!6/1c627/5
SELECT COUNT(*) FROM cases c WHERE NOT EXISTS(SELECT 1 FROM cases sub_c
WHERE sub_c.TCname = c.TCname
AND sub_c.Date <= DATEADD(day,DATEDIFF(day, 1, GETDATE()), 0))
SELECT TCname FROM cases c WHERE EXISTS(SELECT 1 FROM cases sub_c
WHERE sub_c.TCname = c.TCname
AND sub_c.Date = DATEADD(day,DATEDIFF(day, 0, GETDATE()), 0)
AND sub_c.Status = 'PASS')
AND EXISTS(SELECT 1 FROM cases sub_c
WHERE sub_c.TCname = c.TCname
AND sub_c.Date = DATEADD(day,DATEDIFF(day, 1, GETDATE()), 0)
AND sub_c.Status = 'FAIL')
GROUP BY c.TCname
SELECT TCname FROM cases c WHERE EXISTS(SELECT 1 FROM cases sub_c
WHERE sub_c.TCname = c.TCname
AND sub_c.Date = DATEADD(day,DATEDIFF(day, 0, GETDATE()), 0)
AND sub_c.Status = 'FAIL')
AND EXISTS(SELECT 1 FROM cases sub_c
WHERE sub_c.TCname = c.TCname
AND sub_c.Date = DATEADD(day,DATEDIFF(day, 1, GETDATE()), 0)
AND sub_c.Status = 'FAIL')
GROUP BY c.TCname
假設你的日期欄是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.測試案例昨天和今天都失敗了。 SQL Fiddle Demo
SELECT DISTINCT TCname
FROM Testcase
WHERE TCName IN (SELECT TCName
FROM Testcase t
WHERE t.Date >= DATEADD(dd, 0, DATEDIFF(dd, 1, GETDATE()))
AND t.Date < DATEADD(dd, 0, DATEDIFF(dd, 0, GETDATE()))
AND t.Status = 'FAIL')
AND DATE >= DATEADD(dd, 0, DATEDIFF(dd, 0, GETDATE()))
AND Status = 'FAIL'
請添加你已經解決我曾嘗試下面的方法問題 – Ram 2014-09-10 18:11:16
任何企圖,但它返回所有失敗的選擇tc_name FROM [TestcaseTb]其中((狀態=「FAIL」)和(日期= '09/09/2014'OR Date = '09/10/2014')) – 2014-09-10 18:17:22
您的數據似乎是非規範化的。從我所瞭解的情況來看,如果您有一個名爲'testA'的測試用例,那麼您有多少個測試用例已經存在的TCname ='testA'的記錄是否正確?那麼,如果testA已經使用了10天,那麼有10條記錄? 我的另一個假設:Date列的數據類型是「DATE」,而不是「DATETIME」,是否正確?請在您的問題中發佈所有數據類型。 – PawelP 2014-09-10 18:35:34