私は 2 つのテーブル (mysql 内) を持ってBook
おりBookPrice
、BookPriceは本の価格を (経時的に) 格納します。
Book のデータとその現在の価格を表示するビューが必要です。
テーブル構造は次のとおりです。
本
BookId PK Int AI,
BookTitle varchar(255)
予約価格
Id PK Int AI
BookId Int (FK to Book)
Price decimal(8,2)
LastModified datetime
サンプルデータ
本
1, Harry Potter
2, LOTR
3, Game of Thrones
4, 50 Shades of Gray
予約価格
1, 1, 5.00, 2012-01-01 00:00:00
2, 2, 10.00, 2012-01-01 00:00:00
3, 3, 7.00, 2012-01-01 00:00:00
4, 4, 0.99, 2012-01-01 00:00:00
5, 1, 8.00, 2012-02-01 00:00:00
6, 2, 9.00, 2012-02-01 00:00:00
このデータを使用すると、ビューに次のように表示されます。
BookId, Title, Price, PriceLastModified
1, Harry Potter, 8.00, 2012-02-01 00:00:00
2, LOTR, 9.00, 2012-02-01 00:00:00
3, Game of Thrones, 7.00, 2012-01-01 00:00:00
4, 50 Shades of Gray, 0.99,, 2012-01-01 00:00:00
私は次の(多くのバリエーション)を試しました:
SELECT `Book`.`Id`, `Book`.`Title`, `BookPrice`.`Price`, `BookPrice`.`LastModified`
FROM `Book`
LEFT JOIN `BookPrice` ON `BookPrice`.`BookId` = `Book`.`Id`
GROUP BY `Book`.`Id`
ORDER BY `BookPrice`.`LastModified` DESC
ただし、これは Groups then Order に表示されます。つまり、Groups で、各本 (最新のものではない) の最初の価格を選択するので、次のようになります。
1, Harry Potter, 5.00, 2012-01-02 00:00:00
正しいのではなく
1, Harry Potter, 8.00, 2012-02-01 00:00:00
LOTRでも同じ
結合の代わりにサブクエリを使用してこれを機能させることができましたが(これがパフォーマンスの面でどれほど優れているかわかりません)、ビューは選択にサブクエリを持つことができないため、そのステートメントからビューを作成できません声明。
これを回避する方法はありますか?または、「グループ化されていない」ビューを作成してから、最初のビューをグループ化するために 2 番目のビューを作成する必要がありますか?
これはSOで以前に尋ねられた質問に似ていることを認識しており、他の多くの質問を見てきましたが、同じものを見つけることができませんでした(またはビューを扱っています)