所以我有一张桌子,里面装满了租赁物品的预先计算的价格。这是它的简单版本:
我想要的是获得每个物品的最低日价格,所以我这样做了:
SELECT *, ROUND(MIN(price)/duration, 0) xprice FROM `my_cache` WHERE `price` > 0 GROUP BY ROUND(price/duration, 0) ORDER BY `xprice` ASC
但是这样我仍然会得到冗余并且不会分组
xprice
值。
这里有一些关于这可能是什么的提示。没有预期的结果,OP 代码中存在一些问题。目前尚不清楚“每件物品的最低日价格”是多少。提供的示例数据的一些可能性可能是:
SELECT x.OID, Min(x.XPRICE) "XPRICE"
FROM ( Select t.OID, t.DURATION,
ROUND(MIN(t.price)/t.duration, 0) "XPRICE"
From tbl t
Where t.price > 0
Group By t.OID, t.DURATION
) x
GROUP BY x.OID
HAVING Min(x.XPRICE) = XPRICE
/* R e s u l t :
OID XPRICE
----- ------
1168 443 */
SELECT x.*
FROM ( Select t.OID, t.DURATION, t.PRICE,
MIN(t.price) Over(Partition By t.OID) "MIN_XPRICE",
ROUND(Min(t.PRICE) Over(Partition By t.OID) / t.DURATION, 0) "MIN_XPRICE_PER_DURATION"
From tbl t
Where t.price > 0
) x
ORDER BY x.OID, x.MIN_XPRICE, x.MIN_XPRICE_PER_DURATION
LIMIT 1
/* R e s u l t :
OID DURATION PRICE MIN_XPRICE MIN_XPRICE_PER_DURATION
---- -------- ----- ---------- -----------------------
1168 9 3990 3170 352 */