2011-09-15 4 views
2

나는 previous poster과 비슷한 질문입니다.마지막 행이 MySQL을 사용하는 조건과 일치하는 부모/자식 관계의 마지막 자식 행을 선택하는 방법

그의 질문은 : "자식 행이 타임 스탬프에 의해 정렬되는 부모 자식 관계의 마지막 자식 행을 각각 선택하고 싶습니다."

내가이 일을하고 싶은

그러나 나는 또한 status 내 테이블 fobs_inventoryfobs_inventory_history 있습니다 1.

입니다 만 자식 행을 선택하고 싶습니다. fobs_inventory_history.status = 1

------------------------------- 
| fobs_inventory    | 
------------------------------- 
| inv_id | other fields  | 
------------------------------- 
| 1  | ...    | 
| 2  | ...    | 
| 3  | ...    | 
------------------------------- 

---------------------------------------------- 
| fobs_inventory_history      | 
---------------------------------------------- 
| id | inv_id | status | created_at   | 
---------------------------------------------- 
| 1 | 1  | 0  | 2011-10-11 10:00:00 | 
| 2 | 1  | 1  | 2011-08-01 10:00:00 | 
| 3 | 1  | 0  | 2011-07-01 10:00:00 | 

| 4 | 2  | 1  | 2011-09-11 14:00:00 | 
| 5 | 2  | 0  | 2011-08-01 12:00:00 | 
| 6 | 2  | 2  | 2011-07-01 00:00:00 | 

| 7 | 3  | 1  | 2011-10-11 14:00:00 | 
| 8 | 3  | 2  | 2011-08-01 12:00:00 | 
| 9 | 3  | 0  | 2011-07-01 00:00:00 | 
---------------------------------------------- 

은 다음 표과 같이 보일 것입니다 결과 집합을 생성하는 가장 좋은 SQL 구문은 무엇입니까 각 fobs_inventory에 대한 : (가장 최근에 시간 소인 예) fobs_inventory_history 기록, 나는 최신 줄까?

-------------------------------------------------------------------- 
| inv_id | fob_inventory_history_id | status | created_at   | 
-------------------------------------------------------------------- 
| 2  | 4      | 1  | 2011-09-11 14:00:00 | 
| 3  | 7      | 1  | 2011-10-11 14:00:00 | 
-------------------------------------------------------------------- 

나는 status 편집

1의

좀 더이 작업 한 가장 최근의 타임 스탬프가 갖고있는 행만을 반환하고 싶은, 내가 함께했다 나는 다른 사람들이 똑같은 일을하려 할 때 도움이 될 수 있기 때문에 여기에 게시하고있다. 당신은을 수정할 수 있습니다

select h.id, h.fob_id, h.inv_id, h.status, h.created_at from fobs_inventory_history h, (
    select id, inv_id, status, max(created_at) as ts 
    from fobs_inventory_history 
    group by inv_id 
) h2 
where h.created_at = h2.ts 
and h.inv_id = h2.inv_id 
and h.fob_id = 1 and h.status = 1 

답변

0

select 
    inv_id, id AS fob_inventory_history_id, status, created_at from fobs_inventory_history 
where 
    status = 1 
order by created_at desc 
LIMIT 2 

을 시도해보십시오

은 기본적으로 솔루션은 체크 아웃, 부속 선택의 외부 BY 모든 해당하는 MAX (와 관련된 필드) 및 그룹을 선택했다 가져올 행 수에 따라 제한

1

게시 해 주셔서 감사합니다. 그것은 내가 이틀 동안 붙어 있었던 문제를 해결했다. 부모 정보를 포함시켜 다음과 같이이 쿼리에 JOIN을 추가해야했습니다.

select i.custid, i.custorderno, h.id, h.fob_id, h.inv_id, h.status, h.created_at from fobs_inventory_history h, (
    select id, inv_id, status, max(created_at) as ts 
    from fobs_inventory_history 
    group by inv_id 
) h2 
INNER JOIN invoice AS i ON h2.inv_id = i.inv_id 
where h.created_at = h2.ts 
and h.inv_id = h2.inv_id 
and h.fob_id = 1 and h.status = 1 
관련 문제