我的数据有3个变量,用户ID、交易金额和交易日期,我想为每个用户ID汇总2天的交易金额,但有条件。
条件是,例如,我想要汇总ID 12345的8/31和8/30交易金额,如果此ID在8/31的交易金额为0,这意味着此ID在8/31没有任何交易,则忽略此用户ID,我不会汇总此用户ID的金额。
如果另一个ID 23456在8/31有事务,而在8/30没有事务,那么我将在8/31汇总此ID的事务。
如果一个ID 34567在8/30和8/31都有事务,那么我将聚合8/30和8/31的事务。
我该怎么做呢?我整个下午都在挣扎。提前感谢您的任何建议和想法!
发布于 2016-09-26 05:04:44
基于你的问题应该是
select user_id, sum(a.transaction_amount + b.transaction_amount).
from my_table as a
inner join my_table as b on date_add(b.transaction_date, interval 1 day) = a.transaction_date
where date(a.transaction_date) = STR_TO_DATE('31,8,2016','%d,%m,%Y')
and a.transaction_amount > 0
group by user_id发布于 2016-09-26 05:11:17
SELECT User_ID, SUM(Transaction_Amount)
FROM yourTable
WHERE DATE(Transaction_Date) = '2016-08-30'
OR (DATE(Transaction_Date) = '2016-08-31' AND Transaction_Amount > 0)
GROUP BY User_ID发布于 2016-09-26 05:15:24
只需使用条件聚合:
select userid,
sum(case when date = '2016-08-30' then amount else 0 end) as amt_20160830,
sum(case when date = '2016-08-31' then amount else 0 end) as amt_20160831
from t
group by userid
having sum(case when date = '2016-08-31' then amount else 0 end) > 0;代码的确切外观可能因数据库而异,但这是相当标准的SQL。
https://stackoverflow.com/questions/39691702
复制相似问题