我有两个表(在 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
然而,这似乎是 Group 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 一样
我设法使用子查询而不是联接来使其工作(不知道这在性能方面有多好),但随后无法从该语句创建视图,因为视图在选择中不能有子查询陈述。
有办法解决这个问题吗?还是我必须创建一个“未分组”视图,然后创建第二个视图来对第一个视图进行分组?
我知道这类似于之前在 SO 上提出的问题,并且查看了许多其他问题,但找不到相同的问题(或处理视图)