2014-09-10 36 views
0

得到的數據我有這四列的SQL Server表:從SQL表

ID, TCname, Status, Date 

我存儲在該表中的測試用例名稱和狀態和日期。我想從下面的表格中獲取數據。

  1. 沒有新的測試案例加入今天(測試用例不存在,但昨天今天在座)
  2. 測試用例失敗,但昨天今天通過。
  3. 相同測試用例昨天和今天失敗。

感謝

+0

請添加你已經解決我曾嘗試下面的方法問題 – Ram 2014-09-10 18:11:16

+1

任何企圖,但它返回所有失敗的選擇tc_name FROM [TestcaseTb]其中((狀態=「FAIL」)和(日期= '09/09/2014'OR Date = '09/10/2014')) – 2014-09-10 18:17:22

+1

您的數據似乎是非規範化的。從我所瞭解的情況來看,如果您有一個名爲'testA'的測試用例,那麼您有多少個測試用例已經存在的TCname ='testA'的記錄是否正確?那麼,如果testA已經使用了10天,那麼有10條記錄? 我的另一個假設:Date列的數據類型是「DATE」,而不是「DATETIME」,是否正確?請在您的問題中發佈所有數據類型。 – PawelP 2014-09-10 18:35:34

回答

0

假設你只在表中插入新記錄,而不是更新舊的。

第一個例子:

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'` 
+1

謝謝Osahon,您的第一個和第二個查詢沒有任何問題。但3個查詢返回昨天和今天所有失敗的測試用例。但我只需要重複失敗測試用例。 – 2014-09-10 18:58:19

0

假設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 
0

假設你的日期欄是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' 
+0

感謝Srikanth,你的第一和第二個查詢工作正常。但是第三個查詢返回昨天和今天所有不同的失敗測試用例。 – 2014-09-10 19:13:02

+0

你可以添加一些示例輸入和輸出數據到你的問題,並解釋你想要什麼? – Ram 2014-09-10 19:18:56

+0

我更新了代碼 – Ram 2014-09-10 19:30:11