从关联表查询各主展厅对应最低价格的完整数据
主展厅对应最低价格内厅的查询方案
方案1:用窗口函数(推荐,适配MySQL 8.0+、PostgreSQL、SQL Server等现代数据库)
SELECT h.Name AS 主展厅名称, hi.Name AS 内厅名称, hi.Price AS 最低价格, hi.FromDate AS 周期开始日期, hi.EndDate AS 周期结束日期 FROM ( SELECT *, -- 按主展厅分组,同组内按价格升序排序,最低价格的记录标记为1 ROW_NUMBER() OVER(PARTITION BY IdHalls ORDER BY Price ASC) AS rn FROM Halls_Interior ) AS hi JOIN Halls h ON hi.IdHalls = h.id WHERE hi.rn = 1;
如果允许同一主展厅存在多个价格相同的最低内厅,把ROW_NUMBER()换成RANK()即可,这样所有同价的最低记录都会被保留。
方案2:子查询关联(兼容旧版数据库)
如果你的数据库不支持窗口函数(比如MySQL 5.x),可以用这种方式:
SELECT h.Name AS 主展厅名称, hi.Name AS 内厅名称, hi.Price AS 最低价格, hi.FromDate AS 周期开始日期, hi.EndDate AS 周期结束日期 FROM Halls_Interior hi JOIN Halls h ON hi.IdHalls = h.id -- 先算出每个主展厅的最低价格,再关联筛选出对应记录 JOIN ( SELECT IdHalls, MIN(Price) AS MinPrice FROM Halls_Interior GROUP BY IdHalls ) AS min_prices ON hi.IdHalls = min_prices.IdHalls AND hi.Price = min_prices.MinPrice;
这个方案会返回所有价格等于对应主展厅最低价格的内厅记录。
内容的提问来源于stack exchange,提问作者EBRAHEM
相关产品推荐
相关产品推荐

