SQL在72小时内获得总金额> 10,000的所有付款

时间:2018-10-02 11:51:33

标签: sql sql-server sql-server-2017

我正在处理一个虚构的付款数据库,我想检查是否有来自商家的付款,它们的总和在彼此之间的72小时之内超过10k。

SELECT o.MerchantID, SUM(Amount) FROM Payments p 
INNER JOIN Orders o ON p.OrderID = o.ID
WHERE MerchantCreatedOrderOn BETWEEN MerchantCreatedOrderOn AND DATEADD(HOUR, 72, MerchantCreatedOrderOn)
GROUP BY o.MerchantID, o.MerchantCreatedOrderOn, p.ID
HAVING SUM(o.Amount) >= 10000;

现在我的where子句还不正确,我现在只收到总和超过10k的付款,而不是72小时之内的付款。

我想要的结果: 所有付款ID均来自72小时内总计大于10,000的付款。

这是在SQL服务器14.0.100上

我只需要72小时内超过1万的人的付款ID 所以:

|ID    |
|427683|
|427685|
|427688|

1 个答案:

答案 0 :(得分:0)

根据我的评论,我假设您要检查从日期订单起72小时内的每笔订单。该公式实际上是从日期顺序开始-72小时

SELECT o.MerchantID, SUM(Amount) FROM Payments p 
INNER JOIN Orders o ON p.OrderID = o.ID
WHERE MerchantCreatedOrderOn BETWEEN MerchantCreatedOrderOn AND DATEADD(HOUR, -72, MerchantCreatedOrderOn)
GROUP BY o.MerchantID, o.MerchantCreatedOrderOn, p.ID
HAVING SUM(o.Amount) >= 10000;

我将72变成-72。

但是,如果我正确地理解了您,实际上您现在想要72个小时,像这样吗?

SELECT o.MerchantID, SUM(Amount) FROM Payments p 
INNER JOIN Orders o ON p.OrderID = o.ID
WHERE MerchantCreatedOrderOn >= DATEADD(HOUR, -72, getdate())
GROUP BY o.MerchantID, o.MerchantCreatedOrderOn, p.ID
HAVING SUM(o.Amount) >= 10000;