データベースにスクレイピングした製品データがあり、それを自分の Web サイトで使用したいと考えています。 タイトルが「%EXAMPLE%」のすべてのアイテムを返しますが、一意の製品のみを返すクエリを作成したいと考えています。
問題は、1 つのアイテムに複数の行があり、製品ごとに 1 行だけを返したいことです (毎日スクレイピングしているため、毎日アイテムごとに追加の行を取得します)。行の唯一の違いは、別の日付と価格があることです。それが私が探している価格履歴だからです。
###例: ピンクチョコレート、ピンクアップル、ピンク梨の3アイテムをご用意しました。 3回スクラッチしたので、各項目に3行あります。 例: (この例の目的のために、他のすべての列は追加しませんでした):
ABC123DEF | ピンクアップル | 0.47 | |
---|---|---|---|
ABC123DEF | ピンクアップル | 0.42 | 1 |
ABC123DEF | ピンクアップル | 0.41 | 1 |
ABC333FHG | ピンクペア | 0.41 | 1 |
ABC333FHG | ピンクペア | 0.41 | 1 |
ABC333FHG | ピンクペア | 0.41 | 1 |
FH5845FJG | ピンクチョコレート | 0.41 | 1 |
FH5845FJG | ピンクチョコレート | 0.41 | 1 |
FH5845FJG | ピンクチョコレート | 0.41 | 1 |
私が取得したい結果は次のとおりです: | ###製品番号### ###タイトル### ###価格### ###利用可能### |
ABC123DEF
1 | ABC333FHG | ピンクペア | |
---|---|---|---|
FH5845FJG | ピンクチョコレート | 0.41 | |
正しい結果を得るには、タイトルを検索して重複する productId を除外する必要があるようです。でもどうすればいいのか分かりません。 | ###何か案は?
一例:
リーリークエリは、各製品 ID の最高価格行を保存し、その製品の他の行を削除します。
https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=40df8e8e4b3eb206e0f73b7ce3a70a a5一个>
注 - 保存する必要がある完全な行はすべて一意です (削除する必要がある行には完全な重複が存在する可能性があります)。
リーリー
このクエリでは行が一意である必要はありません。その場合、行のコピーが 1 つだけ返されます。すべてのコピーが必要な場合は、ROW_NUMBER() の代わりに RANK() または DENSE_RANK() を使用します。
MySQL 5.x バージョンのソリューション。
リーリーこのクエリは、存在する場合はすべてのレプリカを返します。コピーが 1 つだけ必要な場合は、DISTINCT を追加します。