我一直在尝试从表中获取统计信息。在下面,我试图绘制我的表结构:
在上面,我有我的 Transaction 表,其中记录了每个用户 Profile(profile_id)的每笔交易。同时,我记录了交易创建日期 pub_date , transaction_type (类型选项显示在圆圈中)和交易金额。创建交易后,我会为每个交易提供 Bonus (奖励),并使用适当的 Profile(profile_id)。
因此,我想从日期范围内的上述表中获取统计信息。更精确地:
这里选择的日期范围是指,我将为查询提供 startDate 和 endDate 期间
我可以解决 1。和 2。。但是,我找不到方法(对于 3。)在日期范围内总和每个配置文件的 Bonus 金额。我的解决方法如下:
SELECT mtd.profile_id, sum(mtd.amount) AS summa_deposit,
(
SELECT sum(mtw.amount) AS summa_withdraw
FROM public.main_transaction AS mtw
WHERE mtw.profile_id=mtd.profile_id AND mtw.pub_date>='2017-01-01' AND mtw.pub_date<='2017-10-01' AND mtw.transaction_type IN ('WITHDRAW','WITHDRAW_MANUAL')
)
FROM public.main_transaction AS mtd
WHERE mtd.pub_date>='2017-01-01' AND mtd.pub_date<='2017-10-01' AND mtd.transaction_type IN ('DEPOSIT','DEPOSIT_MANUAL')
GROUP BY mtd.profile_id
ORDER BY mtd.profile_id;
在这里获取每个配置文件奖金的总额不是问题。问题是要使这些金额在日期范围之内。因为,我没有将日期记录到我的 Bonus 表中。我只有我的 transaction_id 和 profile_id
P.S。我的表在PostGreSQL中。
答案 0 :(得分:1)
子查询中是否只需要另一个#!/bin/bash
logFolder="/dstDir/`date '+%Y-%m-%d/%H-%M'`"
tempLogFolder="sourceDir"
if [ -z "$(ls -A $tempLogFolder | grep *.log)" ]; then
mkdir -p $logFolder
mv $tempLogFolder/*.log $logFolder/
fi
?
join
我不知道(SELECT SUM(b.amount) AS summa_bonus
FROM public.bonus b JOIN
public.main_transaction mtw
ON b.transaction_id = mtw.id
WHERE mtw.profile_id = mtd.profile_id AND
mtw.pub_date >= '2017-01-01' AND
mtw.pub_date <= '2017-10-01' AND
mtw.transaction_type IN ('WITHDRAW', 'WITHDRAW_MANUAL')
)
上的过滤器是否必要。