联接后在SQL中减去两列

联接后在SQL中减去两列,sql,Sql,我有一张叫“订单”的桌子 PurchaseID VARCHAR purchaseDate DATETIME purchasePrice FLOAT 我想找出一天与另一天的购买价格之间的差异——puyrchaseID将是相同的。(当然,这只是一个示例表) 那真的有效吗 SELECT a.PurchaseID, ABS(a.PurchaseID - b.PurchaseID) AS diff FROM PurchaseID a INNER JOIN PurchaseI

我有一张叫“订单”的桌子

PurchaseID VARCHAR
purchaseDate DATETIME
purchasePrice FLOAT
我想找出一天与另一天的购买价格之间的差异——puyrchaseID将是相同的。(当然,这只是一个示例表)

那真的有效吗

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和日期


查阅数据库管理系统文档,查看您是否掌握了数学知识。

您可能还想添加
和a.purchaseDate b.purchaseDate
您是否尝试过类似的方法

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

如果愿意,也可以在查询中执行减法。您可能还希望确保不会在同一天购买两件物品:

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
选择a.purchasePrice作为purchasePriceDay1,b.purchasePrice作为purchasePriceDay2,(purchasePriceDay2-purchasePriceDay1)作为purchasePriceDelta
从a命令到b命令
其中a.PurchaseID=b.PurchaseID
a.采购日期
为什么?如果我想知道价格在同一天没有变化,那该怎么办:PIt与您的解决方案相同,只是使用子选择而不是联接。无论哪种方式,如果您使用索引进行搜索,它一点也不重要。@Benoit我们如何修改此查询以仅包括“ABS(a.PurchaseID-b.PurchaseID)>10”行
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; 
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