1

次の詳細を含むテーブルがあります

EMP_NAME     TEST_RESULT   RUN_DATE
----------------------------------------------
John            Pass    12-FEB-2013 18:03:55
Albert          Fail    12-FEB-2013 18:24:29
Chris           Pass    12-FEB-2013 18:24:28
John            Fail    12-FEB-2013 19:32:35
Chris           Pass    12-FEB-2013 19:32:35
Steve           Pass    12-FEB-2013 20:04:35

ここで、一意の名前と TEST_RESULT を持つ行を抽出する必要があります。ただし、従業員が合格と不合格の両方の結果を持っている場合、テスト結果は「不合格」の結果のみになるはずです。クエリの結果は

EMP_NAME     TEST_RESULT   RUN_DATE
----------------------------------------------
Albert          Fail    12-FEB-2013 18:24:29
Chris           Pass    12-FEB-2013 18:24:28
John            Fail    12-FEB-2013 19:32:35
Steve           Pass    12-FEB-2013 20:04:35

私が気にかけているのは 1 つの EMPLOYEE NAME だけです。その EMPLOYEE に対して 2 つの結果が合格と不合格だった場合は、FAIL レコードのみを表示し、時間は気にしません。EMPLOYEE に対して「合格」と「合格」の 2 つの結果がある場合でも、1 つのレコードが必要であり、時間は気にしません。

4

3 に答える 3

2


Select emp_name, test_result, run_date
from (
select emp_name, test_result, run_date,
row_number() over (partition by emp_name
order by test_result, run_date ) rn
from
T1)
where rn=1

于 2013-02-16T21:35:24.613 に答える
1
SELECT EMP_NAME, TEST_RESULT, RUN_DATE
FROM (
  SELECT ROW_NUMBER() OVER (PARTITION BY t1.EMP_NAME ORDER BY RUN_DATE) AS RowNumber,
       t1.EMP_NAME, TEST_RESULT, RUN_DATE
  FROM MyTable t1
  LEFT JOIN 
  (SELECT DISTINCT EMP_NAME 
   FROM MyTable
   WHERE TEST_RESULT = 'Fail' 
  ) AS EMP_With_Failure ON t1.EMP_NAME = EMP_With_Failure.EMP_Name
  WHERE t1.TEST_RESULT = 'Fail' OR EMP_With_Failure.EMP_NAME IS NULL ) t
WHERE RowNumber = 1

このクエリは、失敗したユーザーの成功レコードを除外します。ユーザーごとに 1 つのレコードのみを取得するには、結果セットをフィルター処理する必要があります。

于 2013-02-16T21:10:31.917 に答える
1

このようなものがうまくいくかもしれません。

select emp_name, test_result, run_date
from YourTable
where test_result = 'Fail'
union
select emp_name, test_result, run_date
from YourTable
where test_result = 'Pass'
and emp_name in 
(select emp_name
from YourTable
where TestResult = 'Pass'
minus
select emp_name
from YourTable 
where TestResult = 'Fail'
)
于 2013-02-16T21:09:08.100 に答える