我正在处理一个虚构的付款数据库,我想检查是否有来自商家的付款,它们的总和在彼此之间的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|
答案 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;