如何写SQL计算不同日期的金额差

有一张表t,字段1交易金额,字段2交易日期。怎么写SQL查询交易日期为今天和去年的交易金额之差

row_number 排序,然后用 cte 递归就好

with t1 as (
    select *,row_number() over(order by 交易日期) dtid from t
),t2 as (
    select *,0 as 差额 from t1 where dtid = 1
    union all
    select t1.*,t1.交易金额-t2.交易金额 from t1,t2 where t2.dtid=t1.dtid + 1
)
select * from t2

该回答引用ChatGPT

可以使用如下的SQL查询语句来计算交易日期为今天和去年的交易金额之差:


SELECT SUM(CASE WHEN YEAR(trade_date) = YEAR(NOW()) THEN amount ELSE -amount END) AS diff_amount
FROM t
WHERE trade_date >= DATE_SUB(CURDATE(), INTERVAL 1 YEAR)

这个查询语句使用了SUM函数来计算交易金额之差,使用了CASE语句来确定交易金额的正负值。当交易日期的年份等于当前年份时,交易金额取正值,否则取负值。

WHERE子句中的条件用于筛选出最近一年内的交易记录。DATE_SUB函数用于计算一年前的日期,CURDATE函数用于获取当前日期。

请注意,这个查询结果可能为正数、负数或零。如果结果为正数,则表示今年的交易金额比去年增加了多少;如果结果为负数,则表示今年的交易金额比去年减少了多少;如果结果为零,则表示今年的交易金额与去年相等。