#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