안녕하세요 저는 흥미로운 문제 (정확히는 몇 가지 문제가 있음)가 있으면 누구든지 저를 도울 수 있기를 바랍니다. 저는 현재 Oracle Database에서 데이터를 가져 오는 Crystal Reports 2008에서 SQL로 작업하고 있습니다.오라클 SQL - 최대 및 최소 금액이 포함 된 최신 레코드
특정 기간에 최소 10 건 이상의 테스트를 수행 한 직원 목록을 얻어야합니다. 문제를 추가로 해결하려면 가장 최근의 10 가지 테스트 여야하며 각 고유 테스트 레퍼런스 목록이 필요합니다.
ROW NUMBER() 함수를 사용하는 시작 (첫 번째 코드 및 출력 참조)하지만 단일 직원 번호에 대한 최신 정보 10 개만 보여주고 필요한 경우 10 개의 테스트가 수행되었습니다.
나는 카운트 기능을 통합하고 적어도 10 번의 테스트를 수행 한 직원 만 보여주는 또 다른 코드 조각 (코드와 두 번째 코드 참조)을 제작했습니다.
정말 필요한 출력 표에 표시됩니다 필요가 무엇 :
그래서 내 질문/문제는 다음과 같습니다
- 은 더 함께 작동 할 수 있도록 내 원래의 코드를 수정하는 방법이 있나요 하나의 직원 번호보다?
두 코드를 병합하여 필요한 수의 테스트가 완료되었는지 확인하고 필요한 기준을 충족하는 직원 번호와 테스트 참조 만 표시하는지 여부 (기본 옵션)?
이 문제를 해결하고 다시 시작해야하나요?
나는 이것이 도움이되는 경우 이용 가능한 데이터의 스냅 샷을 보여주는 스프레드 시트를 첨부했다.
도움을 주시면 감사하겠습니다.
WITH TESTNUMBER AS
(SELECT TESTER.STAFF_NO, TESTER.TEST_REF, PERIOD. DATE_OF_TEST, TESTSLOT.SLOT_TIME,
ROW NUMBER() OVER (ORDER BY TESTER.STAFF_NO DESC, PERIOD.DATE_OF_TEST DESC,
TESTSLOT.SLOT_TIME DESC)
AS RowNumber
FROM dB1.TEST_EVENT TESTER
INNER JOIN dB1.PERIOD PERIOD ON TESTER.PERIOD_ID=PERIOD.PERIOD_ID
INNER JOIN dB1.TEST_ SLOT_TIME TESTSLOT ON TESTER.SLOT_TIME_ID=TESTSLOT.SLOT_TIME_ID)
WHERE TESTER.STAFF_NO=405405 AND
(PERIOD.DATE_OF_TEST>={ts '2013-08-01 00:00:00'} AND
PERIOD.DATE_OF_TEST<={ts '2013-08-10 00:00:00'})
SELECT * FROM TESTNUMBER
WHERE RowNumber BETWEEN 1 AND 10;`
STAFF_NO TEST_REF DATE_OF_TEST SLOT_TIME
405405 01 05/08/2013 08:40:00
405405 02 05/08/2013 09:40:00
405405 03 05/08/2013 10:40:00
405405 04 06/08/2013 08:40:00
405405 05 06/08/2013 09:40:00
405405 06 06/08/2013 10:40:00
405405 07 06/08/2013 11:40:00
405405 08 07/08/2013 08:40:00
405405 09 07/08/2013 09:40:00
405405 10 07/08/2013 10:40:00
쿼리 :
SELECT TESTER.STAFF_NO, count(TESTER.STAFF_NO) AS TOTALTESTS FROM
FROM dB1.TEST_EVENT TESTER
INNER JOIN dB1.PERIOD PERIOD ON TESTER.PERIOD_ID=PERIOD.PERIOD_ID
INNER JOIN dB1.TEST_ SLOT_TIME TESTSLOT ON TESTER.SLOT_TIME_ID=TESTSLOT.SLOT_TIME_ID)
WHERE (PERIOD.DATE_OF_TEST>={ts '2013-08-01 00:00:00'} AND PERIOD.DATE_OF_TEST<=
{ts '2013-08-10 00:00:00'})
GROUP BY TESTER.STAFF_NO
HAVING count(TESTER.STAFF_NO)>=10
ORDER BY TESTER.STAFF_NO DESC`
STAFF_NO TEST_REF
405405 12
366255 14
전체 필수 출력
STAFF_NO TEST_REF DATE_OF_TEST SLOT_TIME
405405 03 05/08/2013 10:40:00
405405 04 06/08/2013 08:40:00
405405 05 06/08/2013 09:40:00
405405 06 06/08/2013 10:40:00
405405 07 06/08/2013 11:40:00
405405 08 07/08/2013 08:40:00
405405 09 07/08/2013 09:40:00
405405 10 07/08/2013 10:40:00
405405 11 08/08/2013 08:40:00
405405 12 08/08/2013 09:40:00
366255 17 06/08/2013 09:40:00
366255 18 06/08/2013 10:40:00
366255 19 06/08/2013 11:40:00
366255 20 06/08/2013 12:40:00
366255 21 09/08/2013 08:40:00
366255 22 09/08/2013 09:40:00
366255 23 09/08/2013 10:40:00
366255 24 09/08/2013 12:40:00
366255 25 09/08/2013 14:40:00
366255 26 09/08/2013 15:40:00
이 매우 전문 보이지 않는하지만이 새로운 오전 경우 죄송합니다.
도움을 주셔서 다시 한번 감사드립니다.
안녕하세요 OracleUser –
예 @ 데이브-69! –
안녕하세요, 다시 한 번이 의견을 통해 답변을 올리려고했으며 너무 길다고 들었습니다. 대신 "답변에 대한 질문"을 대신 사용하겠습니다. –