2010-06-21 48 views
1

我有一台名为订单减去两列SQL加入后

PurchaseID VARCHAR 
purchaseDate DATETIME 
purchasePrice FLOAT 

我想找到一个一天与另一天的购买价格之间的差额 - 该puyrchaseID将是相同的(这是只是过程的示例表)

SELECT a.purchasePrice AS purchasePriceDay1 , b.purchasePrice AS purchasePriceDay1 
from Orders a , Orders b 
where a.PurchaseID = b.PurchaseID 

那会竟在placeho工作

回答

3
SELECT 
    a.PurchaseID, 
    ABS(a.PurchaseID - b.PurchaseID) AS diff 
FROM 
    PurchaseID a INNER JOIN PurchaseID b ON a.PurchaseID=b.PurchaseID 
WHERE a.PurchaseID=? 
    AND a.purchaseDate=? 
    AND b.purchaseDate=? 

填写带有ID和日期的邮件进行比较。

请参阅您的DBMS文档,看看您是否有数学absolute function

+3

当然,请停止使用隐式连接! – HLGEM 2010-06-21 19:56:04

+0

我如何加入有什么问题? – 2010-06-21 19:57:49

+0

@Benoit我们如何修改这个查询,只包含行“ABS(a.PurchaseID - b.PurchaseID)> 10” – bluejamesbond 2015-10-22 05:30:26

0

你可能也想添加AND a.purchaseDate <> b.purchaseDate

+0

为什么?如果我想知道价格在同一天没有变化怎么办:P – 2010-06-21 19:49:51

0

你尝试过类似

SELECT a.purchasePrice AS p1, b.purchasePrice AS p2, a.purchasePrice - b.purchasePrice as difference 
from Orders a inner join Orders b on a.PurchaseID = b.PurchaseID 
0
SELECT ((SELECT purchasePrice FROM Orders WHERE PurchaseID = 1 AND purchaseDate = '2010-06-21') - (SELECT purchasePrice FROM Orders WHERE PurchaseID = 1 AND purchaseDate = '2010-06-20')) AS diff; 
+1

这只是毛重。 – 2010-06-21 19:51:25

+0

这与您的解决方案相同,只是使用子选择而不是连接。无论哪种方式,如果您使用索引进行搜索,则完全不是严重问题。 – 2010-06-22 08:17:33

0

可以执行减去权查询,以及如果你想。您可能还想确保您不会在同一天内购买两件商品:

SELECT a.purchasePrice AS purchasePriceDay1 , b.purchasePrice AS purchasePriceDay2, (purchasePriceDay2-purchasePriceDay1) AS purchasePriceDelta 
from Orders a , Orders b 
where a.PurchaseID = b.PurchaseID 
and a.PurchaseDate < b.PurchaseDate