我试图获得对象的最低价格。问题是可以有每日和每周的价格。因此,当搜索最便宜的价格时,我必须将当日价格时间乘以7并与周价格进行比较,以获得最便宜的价格。 也可能发生一个对象只有周价或只有一天价格(或根本没有价格)。
顺便说一句:它必须是这样一个子选择查询,因为我稍后会有更多的WHERE查询。
Pricetable
id price type oid
1 10 d 1
2 12 d 2
3 70 w 1
4 80 w 2
Objects
id name
1 house1
2 house2
这是我正在使用的,但它无法正常工作。当天价格* 7大于周价时,它仍然给我当天的价格。
SELECT p.oid, p.price, p.id, p.type FROM Pricetable p INNER JOIN (
SELECT oid, MIN(IF(type="w",price, price*7)) AS price, id, type
FROM Pricetable
GROUP BY oid
) p2 ON p.oid = p2.oid AND p.id= p2.id
答案 0 :(得分:2)
您的查询应该可以获得最低价格。但是,它应该写成:
SELECT oid, MIN(CASE WHEN type = 'w' THEN price ELSE 7*price END) AS price
FROM Pricetable
GROUP BY oid ;
如果您希望行中的其他值具有最低价格,那么您需要更多逻辑。怎么样?
SELECT pt.*oid, MIN(CASE WHEN type = 'w' THEN price ELSE 7*price END) AS price
FROM Pricetable pt
WHERE pt.id = (SELECT pt2.id
FROM PriceTable pt2
WHERE pt2.oid = pt.oid
ORDER BY (CASE WHEN pt2.type = 'w' THEN pt2.price ELSE 7*pt2.price END)
LIMIT 1
);
答案 1 :(得分:0)
你需要一个具有某种排名的子选择才能获得最便宜的价格。
检查https://dba.stackexchange.com/questions/13703/get-the-rank-of-a-user-in-a-score-table这应该让你走上正轨。
我现在无法访问MySQL,它与MSSQL有点不同。但是这个链接应该让你走上正轨。