SQL Server 2014中如何获取MIN实际价对应的原始价格与折扣?
解决方案:获取分组后最低实际价格对应的原始字段值
在SQL Server 2014中,你可以借助窗口函数ROW_NUMBER()来实现需求,具体思路是先为每个IDHOTEL分组内的记录按实际价格(通过dbo.GetActualValue计算)排序,取每组中排序第一的记录,就能拿到对应最低实际价格的原始Price_Value和Discount。
完整SQL语句如下:
WITH RankedRooms AS ( SELECT IDHOTEL, Price_Value, Discount, dbo.GetActualValue(Price_Value, Discount) AS ActualPrice, ROW_NUMBER() OVER ( PARTITION BY IDHOTEL ORDER BY dbo.GetActualValue(Price_Value, Discount) ASC ) AS RowNum FROM HotelRoom ) SELECT IDHOTEL, Price_Value, Discount, ActualPrice FROM RankedRooms WHERE RowNum = 1;
代码说明:
- CTE
RankedRooms:先计算每条记录的实际价格,并通过ROW_NUMBER()按IDHOTEL分组,每组内按实际价格升序编号,实际价格最低的记录编号为1。 - 主查询:筛选出编号为1的记录,就是每个酒店实际价格最低的那条,同时保留原始的
Price_Value和Discount字段。
如果存在多个记录实际价格相同且同为最低的情况,ROW_NUMBER()只会返回其中一条。如果需要返回所有并列最低的记录,可以把ROW_NUMBER()换成RANK()或DENSE_RANK()。
内容的提问来源于stack exchange,提问作者Pham van phuong
相关产品推荐
相关产品推荐

