2010-04-17 4 views
1

내 문제는 간단합니다.mysql을 사용하여 모든 카테고리에 마지막으로 삽입 된 것을 검색해야합니다.

두 개의 테이블 즉 카테고리와 제품이 있습니다.

테이블 : 카테고리

id  category 

1  cat1 

2  cat2 

3  cat3 

4  cat4 

테이블 : 제품

id productName category 

1 test1   1 

2 test2   2 

3 test3   3 

4 test4   4 

5 test5   2 

6 test6   2 

내 PROB이다 : 나는 모든 카테고리에서 마지막으로 삽입 된 제품을 필요

.

어떻게 해결할 수 있습니까? 이 여기에 물어 가장 일반적인 SQL 질문 중 하나, 당 그룹의 최대의 변형입니다 사전

답변

0

당신은 create_time 타임 스탬프를 추가 할 수 있습니다 제품이 추가되었으며 카테고리별로 최신 항목을 다음과 같이 검색합니다.

select max(create_time),category from product group by category 
+0

제품 이름에 범주에 대한 기능적 종속성이 없으므로'GROUP BY category'에 대해'productName'을 선택할 수 없습니다. 'create_time'이 'MAX (create_time)'와 일치하는 제품과 동일한 제품 일 필요는 없지만, 카테고리에서 임의의 제품 이름을 얻을 수 있습니다. 다른 데이터베이스 소프트웨어 및 ANSI SQL : 92에서는 단순히 오류입니다. – bobince

+0

스태커 고마워, – Fero

+0

@bobince 고마워. – stacker

0

감사합니다. 예를 들어보십시오. this question을 사용하여 다양한 접근 방식을 사용할 수 있습니다.

내가 자주 사용하는 사람은 그 위에 값이없는 행을 선택 널 자기 왼쪽 조인입니다 :

SELECT p0.* 
FROM product AS p0 
LEFT JOIN product AS p1 ON p1.category=p0.category AND p1.id>p0.id 
WHERE p1.id IS NULL 

id s는 그래서 순서대로 할당된다고 가정한다 가장 높은 것이 가장 최근의 것입니다. 일반적으로 정렬 메커니즘으로 ID를 사용하는 것이 좋지 않습니다. 일반적으로 작업 할 각 행에 added 시간 소인을 추가하십시오.

(두 행에 동일한 열이있는 경우 그룹 별 최대 기능에서 두 개 이상의 행을 반환 할 수 있습니다.) 문제가 발생하면 UNIQUE 주문 열을 사용하여 피할 수 있습니다. 기본 키는 id입니다. 그것은 이미 SQL 사용이 명 최대가있을 경우에도 단일 행을 얻을 수 있습니다.. 2003의 유용한 것이 아니라 추한 ROW_NUMBER() OVER 윈도우 기능을하지만, 이것은 MySQL이 지원되지 않음) 때 새를

관련 문제