SQL 在 72 小时内获取总和 > 10,000 的所有付款
Posted
技术标签:
【中文标题】SQL 在 72 小时内获取总和 > 10,000 的所有付款【英文标题】:SQL get all Payments where sum > 10,000 in 72 hours 【发布时间】:2018-10-02 11:51:33 【问题描述】:我正在研究一个虚构的支付数据库,我想检查是否有来自商家的付款在 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 小时内付款..
我想要的结果: 72 小时内总和 > 10,000 的付款中的所有付款 ID。
这是在 SQL-server 14.0.100 上
我只需要72小时内超过10k的人的付款ID 所以:
|ID |
|427683|
|427685|
|427688|
【问题讨论】:
样本数据和所需结果会有所帮助,您正在使用的数据库的标签也会有所帮助。 MerchantCreatedOrderOn 在 MerchantCreatedOrderOn 和 DATEADD(HOUR, 72, MerchantCreatedOrderOn) 之间???WHERE MerchantCreatedOrderOn BETWEEN MerchantCreatedOrderOn AND DATEADD(HOUR, 72, MerchantCreatedOrderOn) and SUM(o.Amount) >= 10000;
怎么样
从现在起 72 小时后,或者您想检查每个可能的 72 小时内的每个订单?如果每个订单 72 小时,这将非常慢,必须使用 foreach。
我在 GROUP BY 中找到了 o.MerchantCreatedOrderOn 和 p.ID。
【参考方案1】:
根据我的评论,我假设您想从订单日期起 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;
【讨论】:
以上是关于SQL 在 72 小时内获取总和 > 10,000 的所有付款的主要内容,如果未能解决你的问题,请参考以下文章
如何从SQL中的当前时间获取所有时间在下一个小时范围内的数据