2014-09-10 4 views
0

У меня есть таблица SQL Server с этими четырьмя столбцами:получить данные из таблицы SQL

ID, TCname, Status, Date 

Я храню имя TestCase и статус и дату в этой таблице. Я хочу получить данные из этой таблицы ниже.

  1. нет новых тестовых случаев не было добавлено сегодня. (Тест нет вчера, но сегодня присутствует)
  2. Тестовый случай неудачу вчера, но проходят сегодня.
  3. такой же тест случай провалился вчера и сегодня.

Благодаря

+0

Пожалуйста, добавьте любые попытки, которые вы сделали, чтобы решить вопрос – Ram

+1

Я попытался ниже подход, но вернуть все неудачи выберите tc_name FROM [TestcaseTb] где ((статус = «FAIL») AND (Date = '09/09/2014 'OR Date = '09/10/2014')) –

+1

Ваши данные, как представляется, денормализуются. Из того, что я собираю, если у вас есть тестовый пример с именем «testA», у вас столько записей с TCname = 'testA', сколько дней в тестовом случае было, правильно? Итак, если testA используется в течение 10 дней, есть 10 записей? Другое мое предположение: тип данных столбца Date является 'DATE', а не' DATETIME', верно? Пожалуйста, разместите все типы данных в своем вопросе. – PawelP

ответ

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

Спасибо Осахону, ваш первый и второй запрос работают без каких-либо проблем. Но 3 запроса возвращают все неудачные тестовые окна вчера и сегодня. но мне нужны только повторные тесты с ошибкой. –

0

Предполагая, что тип Date столбца DATE (не DATETIME) и что каждый день вы вставляете одну запись за каждый т Эст случай (который существует как в тот день, очевидно)

Вот скрипку, так что вы можете проверить это работает, как вам нужно: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.No новых тестовых случаев добавлены сегодня

SELECT COUNT (*) AS [New Test Case Count] 
FROM Testcase 
WHERE DATE >= DATEADD(dd, 0, DATEDIFF(dd, 0, GETDATE())) 

2.Test случай, который вчера не удалось, но прошло сегодня

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, ваш 1-й и 2-й запросы работают нормально. Но третий запрос возвращает все отчетливые тесты с ошибкой вчера и сегодня. –

+0

Можете ли вы добавить некоторые примеры входных и выходных данных на свой вопрос и объяснить, что вы хотите? – Ram

+0

Я обновил код – Ram