0

次のようなテーブルがあります。

+--------+-------+-------+
|TestName|TestRun|結果|
+--------+-------+-------+
| | テスト1 | 1 | 失敗 |
+--------+-------+-------+
| | テスト1 | 2 | 失敗 |
+--------+-------+-------+
| | テスト2 | 1 | 失敗 |
+--------+-------+-------+
| | テスト2 | 2 | 合格 |
+--------+-------+-------+
| | テスト3 | 1 | 合格 |
+--------+-------+-------+
| | テスト3 | 2 | 失敗 |
+--------+-------+-------+

このテーブルは、テスト結果の簡単な要約を格納するために使用されます。各テストが失敗したビルドの数を返すクエリ (T-SQL を使用しますが、どの方言でもかまいません) を作成したいと考えています。この例を入力として使用すると、次のような結果セットが返されます。

+--------+----------+
|テスト名|回帰|
+--------+----------+
| | テスト1 | 2 |
+--------+----------+
| | テスト2 | 0 |
+--------+----------+
| | テスト3 | 1 |
+--------+----------+

クエリは、失敗の総数をカウントするのではなく、現在の「連続失敗」のみをカウントする必要があることに注意してください。MAX(TestRun) が最新の実行であると想定できます。

何か案は?

編集:文法

4

3 に答える 3

1

CTE を使用した別のアプローチを次に示します。

;WITH streaks AS (
    SELECT t.Name, t.Run, t.Outcome 
    FROM TestRuns t
    INNER JOIN (SELECT Name, MAX(Run) AS MaxRun FROM TestRuns GROUP BY Name) maxes
    ON maxes.Name = t.Name AND maxes.MaxRun = t.Run

    UNION ALL

    SELECT t.Name, t.Run, t.Outcome
    FROM TestRuns t
    INNER JOIN streaks s ON s.Name = t.Name AND s.Outcome = 0
    WHERE t.Run = s.Run - 1 AND t.Outcome = 0
)

SELECT Name
, SUM(CASE WHEN Outcome = 0 THEN 1 ELSE 0 END) AS Regression
FROM streaks
GROUP BY Name

ここに、データのサンプルを含むSQL Fiddleがあります

于 2013-08-15T19:03:06.417 に答える
1
select a.TestName,a.TestRun,a.Outcome From table1 a join 
Table1 b on a.TestName=b.testname          
and a.Outcome='Fail' 
and a.TestRun>b.TestRun
于 2013-08-15T18:02:44.650 に答える