2012-03-06 17 views
3

私は2つのテーブルwp_eventsとwp_merchantsを持っています。SQL重複レコードに基づく最新レコードを選択

wp_eventsテーブルに重複した行が多数ありますが、唯一の違いは、レコードがデータベースに追加されたときの列のアップロード日(TIMESTAMP)です。 wp_eventsテーブルから価格を選択するSQL文が必要ですが、重複がある場合は最新のものを選択してください。

これは私がこれまで行ってきたものですが、すべてのレコードが選択されているわけではありません。

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

はい、しかし、何らかの理由でより多くの行を入力した後に問題があるようです。あなたの質問にも同じ業者(WTS)からの3件の結果が表示されていますが、上記のものは可能なもののうち3つを選択しているに過ぎません4。したがって、結果にWTSはありません。 - –

答えて

1

を参照してください。

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 

チェックして、これはあなたが何を意味するかどうかを確認してください。

+0

を検索していただきありがとうございます。 http://www.ticketreview。ネット/祭りチケット/ヨーロッパフェスティバル/ロック・イン・パーク・フェスティバル2012年 - 週末チケット - ツェッペリンフェルド2012年 - 2012年 - 祭りチケット購入 - それは同じ商人からの3つの結果をリストアップしますが、このクエリは可能な4のうち3つだけを選択します。結果的にWTSはありません。 –

+0

私はhttp://sqlfiddle.com/#!2/d1を更新しました私が意味することを示すために871/2、正しい結果が返されません。見るには2分かかりますか? –

+0

私はちょうど1つの小さな部分が欠けていた。私は私の答えを更新しました。 – 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です。 –

関連する問題