다음 표 A & 표 B (여기서 A는 B와 1 대 다수); A의 각 레코드에 대해 A. 에 대해 각 그룹에 대해 B의 해당 최대 레코드를 선택해야합니다. 즉 그룹화는 last_updated_time을 기준으로 수행됩니다.여기에서 max의 뚜렷 함을 선택하는 방법
SELECT taba.ws_name, tabb.b2a, max(tabb.last_update_time)
FROM TabA taba, TabB tabb
where taba.name = 'xyz'
and taba.id = tabb.b2a
group by taba.ws_name, tabb.b2a
잘 작동합니다.
마지막 트랜잭션뿐만 아니라 "상태"를 선택해야 할 때 문제가 발생합니다. 상태가 실패하거나 성공할 수 있기 때문에 중복 선택이 발생합니다.
내 요구 사항은 과거의 어떤 "ws_name는"여러 실패의 기록뿐만 아니라 성공을 가지고 그래서
(나뿐만 아니라 상태를 표시해야하지만)에 관계없이 그 상태의 최대 레코드를 선택하는 것입니다 따라서 MAX updated_time은 두 그룹 ("실패"& "성공")에 대해 선택됩니다.
다음은 내가 시도한 쿼리이며 상태로 인해 선택된 복제본을 제거하는 방법에 대한 단서가 없습니다.
SELECT taba.ws_name, tabb.b2a, **tabb.status**, max(tabb.last_update_time)
FROM TabA taba, TabB tabb
where taba.name = 'xyz'
and taba.id = tabb.b2a
group by taba.ws_name, tabb.b2a, **tabb.status**
내가 직장에서 집에 돌아 왔을 때 내 SQL 뇌가 꺼졌지만 tabb.status별로 그룹화하지 않고 오류가 발생했습니다. –
@JoachimIsaksson은 서버 유형에 따라 다릅니다. 포스트그레스와 같은 "엄격한"서버는 폭발 할 것입니다. mysql과 같이 "Lax"서버는 그렇지 않습니다. mysql의 경우 각 그룹에 대해 처음 발견 된 행을 반환합니다. – Bohemian