получить разницу между текущей суммой и максимальной суммой

#sql #sap-ase

#sql #sap-ase

Вопрос:

Я пытаюсь получить разницу в двух суммах. Первая — это текущая сумма транзакции, которую в данный момент совершил клиент. Другая — это самая большая сумма, которую клиент когда-либо делал в течение двух месяцев. Похоже, мой скрипт не работает. вместо того, чтобы указывать максимальное значение суммы, которое когда-либо делал клиент, он выдает мне значение суммы на первом свидании. Это сценарий, который я написал на SQl

 select 
 a.trans_date, 
 a.card_num, 
 max(a.trans_amount) curr_maxAmount, 
 max(b.trans_amount) prev_maxAmount, 
 (a.trans_amount - max(b.trans_amount)) Amt_Diff 
from e_transaction a, 
     e_transaction b 
where a.card_num = b.card_num 
  and a.trans_date between '20161021 00:00'  and '20161021 23:59' 
  and b.trans_date between '20160801 00:00' and '20160831 23:59' 
  and 
group by a.trans_date, a.card_num, a.trans_amount 
having (a.trans_amount - max(b.trans_amount)) > 99999
  

База данных — Sybase. Пожалуйста, помогите просмотреть этот скрипт и дайте мне знать, где я ошибаюсь.

Комментарии:

1. Это завершено? У вас есть and без чего-либо после него

2. Выполните max(b.trans_amount) в подзапросе, соедините с его результатом.

3. Примечание для даты, которое вы могли бы использовать convert(date, '2016-10-21') (не уверен, что это быстрее … но это безопаснее, если у вас транзакция в 23: 59:01, вы … 😉 )

4. Спасибо, я обновил дату с помощью convert (дата, ‘2016-10-21’). Хотя я все еще получаю тот же результат.

5. Возможно, вы можете попробовать присоединиться e_transaction a к (SELECT max(trans_amount), card_num FROM e_transaction WHERE trans_date between '20160801 00:00' and '20160831 23:59' GROUP BY card_num) b на a.card_num = b.card_num