2012-03-06 5 views
3

테이블 2 개, wp_events 및 wp_merchants가 있습니다.SQL 중복 레코드를 기반으로 최신 레코드를 선택하십시오.

wp_events 테이블에 중복 된 행이 많습니다. 유일한 차이점은 레코드가 데이터베이스에 추가 된 시간 (TIMESTAMP)입니다. wp_events 테이블에서 가격을 선택하는 SQL 문이 필요하지만 중복이있는 경우 가장 최근의 SQL 문을 선택하십시오.

이것은 내가 지금까지 가지고 있지만 모든 레코드가 선택되지는 않았습니다.

SELECT e.merchant, e.price, e.url, m.merchant_logo, m.merchant_name, e.eventname 
FROM wp_events e 
INNER JOIN wp_merchants m 
ON e.merchant = m.merchant_name 
AND e.uploaddate = (SELECT MAX(uploaddate) FROM wp_events WHERE merchant = e.merchant AND eventname = e.eventname) 
ORDER BY price ASC 

확인하고 이것이 당신이 무엇을 의미하는지 있는지 확인하십시오

SELECT e1.merchant, e1.price, e1.url, wp_merchants.merchant_logo, wp_merchants.merchant_name, e1.eventname 
FROM wp_merchants, wp_events e1 
LEFT JOIN wp_events e2 ON (e1.merchant = e2.merchant 
AND e1.uploaddate < e2.uploaddate) 
WHERE e2.merchant IS NULL 
AND wp_merchants.merchant_name = e1.merchant 
ORDER BY price ASC 

나는이 필요하시면 생각 http://sqlfiddle.com/#!2/1db0e/1

+0

귀하의 질문 (최적이 아닌 경우)은 귀하가 설명한대로 정확하게 반환하는 것처럼 보입니다. 정확하게 당신은 무엇을 기대하고 있습니까? – SWeko

+0

http://stackoverflow.com/questions/9270420/sql-closest-rows-to-now-but-unique와 중복되지 않습니까? 사실 그것은 내가 제공 한 것과 동일한 쿼리이며 문제를 해결할 수 있지만 허용 된 것으로 표시하지 않았습니다. –

+0

안녕하세요.하지만 더 많은 행을 입력 한 후 어떤 이유로 든 문제가있는 것으로 보입니다. 보고 주셔서 고마워. 참조하십시오 : ticketreview.net/festival-tickets/european-festivals/... 이 목록에는 동일한 판매자 (WTS)에서 3 개의 검색 결과가 있지만 위 쿼리는 3 개의 가능한 항목 중에서 4 개만 선택합니다. 따라서 결과에 WTS가 없습니다. - –

답변

1

참조하십시오.

+0

찾아 주셔서 감사합니다. 참조 : http : //www.ticketreview. 그물/축제 티켓/유럽 축제/암벽 공원 축제 2012-weekend-tickets-tickets-zeppelinfeld-01-june-2012-buy-your-2012-festival-tickets-now/ 동일한 상인에게서 3 개의 결과를 나열하지만이 쿼리는 가능한 4 중에서 3 개만 선택합니다. 결과적으로 WTS가 없습니다 .. –

+0

http://sqlfiddle.com/#!2/d1을 업데이트했습니다. 871/2의 의미를 나타내려면 올바른 결과가 반환되지 않습니다. 보시려면 2 분 정도 걸릴 수 있습니까? –

+0

나는 하나의 작은 부분을 놓치고있었습니다. 내 대답을 업데이트했습니다. – aaroncatlin

1

사용중인 RDBMS를 지정하지 않았으므로 ROW_NUMBER()를 사용하여 자체 테이블을 조인하거나 하위 쿼리를 사용할 필요가 없습니다. SQL Server, Oracle 또는 PostgreSQL에서 작동해야합니다.

SELECT * FROM (
    SELECT e.merchant AS merchant_name, e.price, e.url, e.event_name, m.merchant_logo 
     , ROW_NUMBER() OVER (PARTITION BY e.merchant ORDER BY e.uploaddate DESC) as the_row 
     FROM wp_events e 
    INNER JOIN wp_merchants m 
     ON e.merchant = m.merchant_name 
    ) WHERE the_row = 1 
ORDER BY price ASC 

MySQL을 사용하는 경우 다른 방법을 사용해야합니다.

+0

알려 주셔서 고마워요, 실제로 MySQL을 사용하고 있습니다. –

관련 문제