我有一个下表:
trade_id |股票代码 |日期 |金额
该表包含我进行的所有交易。我想知道我上周赚到的金额以及每只股票的总金额。
股票代码 |第 1 周金额 |剩余金额
例如:
1 | A | 2013-01-01 | 200
2 | A | 2013-06-25 |-100
3 | B | 2013-06-25 | 100
4 | C | 2013-04-01 | 100
今天是我们本地时间 2013 年 6 月 26 日,所以我应该得到:
A |-100 | 100
B | 100 | 100
C | 0 | 100
我以为这不是什么难事,但我写了一个complex subquery像这样:
SELECT lst_week.stock_code,
lst_week.amount_in_lst_week,
total.amount_remaining
FROM (SELECT t1.stock_code,
SUM(COALESCE(t2.amount, t2.amount, 0)) AS amount_in_lst_week
FROM trade t1
LEFT JOIN trade t2 ON t1.trade_id = t2.trade_id
AND TO_DAYS(NOW()) - TO_DAYS(t1.date) <= 7
GROUP BY t1.stock_code) lst_week,
(SELECT stock_code, SUM(amount) AS amount_remaining
FROM trade
GROUP BY stock_code) total
WHERE lst_week.stock_code = total.stock_code;
它有效,但我想知道是否可以不使用子查询来做到这一点?或者任何更简单的方法?谢谢。
最佳答案
这个怎么样:
select
Stock_code
,[1st week] = sum(case when [date] >= getDate()-7 then amount else 0 end)
,remainder = sum(amount)
from data
group by Stock_code
关于mysql - 有没有办法在不使用子查询的情况下检索聚合值和非聚合值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17310615/