TABLE_A와 TABLE_B의 두 테이블이 있습니다. 이것은 내가하고 싶은 것입니다 : TABLE_A에서 FIELD_2의 모든 고유 한 발생을 각 발생에 대해 가장 높은 FIELD_1과 함께 취하십시오. 그런 다음 TABLE_B의 해당 FIELD_3이 '확인'되지 않은 곳에있는 FIELD_1의 항목 만 선택하십시오. (FIELD_1은 TABLE_A 및 TABLE_B에 모두 존재합니다.)기준을 취하기 전에 집계 함수 적용
처음에는 앞에서 설명한대로 3 단계로 간단하게 시작했습니다. 나는이 가져 수행 할 작업을 계속 같이, 그러나
/* START Step 3 – Take only those of the highest FIELD_1 from TABLE_A, where the corresponding FIELD_3 in TABLE_B is not ‘OK’ */
SELECT DISTINCT
FIELD_1
FROM
TABLE_B
WHERE
FIELD_1 IN
(
/* START Step 2 – Take only the highest FIELD_1 from Step 1 */
SELECT
MAXFIELD_1
FROM
(
/* START Step 1 – Take the highest FIELD_1 for all of the FIELD_2 which are in TABLE_A */
SELECT
FIELD_2,
MAX(FIELD_1) MAXFIELD_1
FROM
TABLE_A
GROUP BY
FIELD_2
/* END Step 1 */
)
/* END Step 2 */
)
AND
FIELD_3 <> 'OK'
/* END Step 3 */
: (즉, 내가 코드를 작성하는 방법이다, 나는 그것이 바깥쪽으로 길을 1 단계로 시작하고, 일을하는 것이 가장 쉬운 방법입니다 무슨 짓을 참조하십시오) 추악하고 못 생기고, 나는 JOIN 문을 사용하여 단축하는 방법을 찾고있다.
SELECT
A.FIELD_2,
MAX(A.FIELD_1) FIELD_1
FROM
TABLE_A A
INNER JOIN TABLE_B B ON A.FIELD_1 = B.FIELD_1
WHERE
B.FIELD_3 <> 'OK'
GROUP BY
A.FIELD_2
불행하게도, 지금의 일이 보인다 것은> 'OK'FIELD_3 < 해당하는 경우 MAX (A.FIELD_1가) TABLE_A에서 가장 높은 FIELD_1를 반환한다는 것입니다 : 처음에 나는이 시도했다. 즉, where 문이 먼저 적용되고 다음에 FIELD_1이 가장 많이 선택됩니다. 우선 A.FIELD_2 및 MAX (A.FIELD_1)를 선택하고 이후에 을 선택해야하며 B.FIELD_3 <> 'OK'인 경우 만 선택하십시오.
어떻게하면됩니까?
내가 쿼리에
DISTINCT
키워드를보기 위해 기다리고 있었다 TABLE_A
에 FIELD_2의 모든 고유 항목을 가지고 : 당신이 당신의 첫 번째 요구 사항을 적용 곳
안녕하세요! 답변 주셔서 감사합니다. 불행히도 그것은 작동하지 않았다. GROUP BY에 B.FIELD_3을 추가 했으므로 실행할 수있게 수정했습니다. 그 결과는 이전의 시도와 똑같은 기록입니다. 문제는 처음에 B : FIELD_3을 포함한다는 사실과 관련이 있다고 생각합니다. 즉, 처음에는 SELECT 용어에서 B.FIELD_3이 발생할 때마다 가장 높은 A.FIELD_1을 얻습니다. 그럼 B.FIELD_3이 'OK'인 가장 높은 A.FIELD_1과 다른 모든 B.FIELD_3의 경우 가장 높은 A.FIELD_1에 대한 레코드를 모두 얻게됩니다. – CupofTea
그런 다음 HAVING 용어를 포함 시키면 가장 높은 B : FIELD_3 만 선택하게됩니다. A.FIELD_1은 '확인'되지 않았으므로 피하려고 했었습니다. 처음에는 SELECT 용어에서 B.FIELD_3없이 실행하려고했지만 여전히 작동하지 않았습니다. – CupofTea
그건 그렇고, 처음에는 쿼리에서 DISTINCT를 예상했다. 나는 GROUP BY를 사용할 때 DISTINCT를 사용할 필요가 없다고 생각했지만 아마 오해했을 것입니다. – CupofTea