比较日和周价格并且变得最便宜

时间:2017-04-07 16:20:34

标签: mysql sql

我试图获得对象的最低价格。问题是可以有每日和每周的价格。因此,当搜索最便宜的价格时,我必须将当日价格时间乘以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

2 个答案:

答案 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有点不同。但是这个链接应该让你走上正轨。