SQL получает все платежи, сумма которых> 10000 за 72 часа - PullRequest
0 голосов
/ 02 октября 2018

Я работаю над вымышленной платежной базой, и я хочу проверить, есть ли платежи от продавца, сумма которого превышает 10 000 в течение 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;

теперь мойгде пункт неправильный, теперь я получаю только те платежи, сумма которых превышает 10 тыс., но не тогда, когда это происходит в течение 72 часовч.

это на SQL-сервере 14.0.100

мне нужны только идентификаторы оплаты от тех, кто превышает 10k за 72 часа, так:

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

1 Ответ

0 голосов
/ 02 октября 2018

Из моего комментария я предполагаю, что вы хотите проверять каждый заказ от 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;
...