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中的当前时间获取所有时间在下一个小时范围内的数据

获取区间内加权平均值的总和

SQL从日期范围内的同一表中的不同记录中获取多个项目的总和(ORACLE)

从表中检索特定 24 小时时间范围内的记录

Rocky Linux前景喜人:8.4版本在72小时内迎来8万下载量