期初金额和期末金额的查询问题

有个SQL语句是根据时间范围查询期初和期末余额,要实现的效果是如果查询的是1月到3月的,那么期初是1月的期初,期末是3月的期末,其他字段求和;如果查询的是5月到8月的数据,那么期初就是5月的期初,期末就是8月的期末,其他字段求和。总结来说就是期初就查开始日期的,期末就差结束日期的,这样的SQL语句怎么写?

SQL 2490322874 发布于 2025-2-14 09:08 (编辑于 2025-2-14 09:08)
1min目标场景问卷 立即参与
回答问题
悬赏:3 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共2回答
最佳回答
0
华莉星宸Lv7资深互助
发布于2025-2-14 09:11(编辑于 2025-2-14 09:12)

参考

select sum(case when 月份字段= 开始日期控件 then 金额 else 0 end) as 期初,

sum(case when 月份字段= 结束日期控件 then 金额 else 0 end) as 期末,

sum(金额)

from tb

where 月份字段>= 开始日期控件

and 月份字段<= 结束日期控件

  • 2490322874 2490322874(提问者) 期初期末金额用这种方法可以,但又出现个新问题,还有期初和期末方向,这两个字段的值是汉字,就导致分组求和后不对
    2025-02-14 11:02 
  • 华莉星宸 华莉星宸 回复 2490322874(提问者) 方向其实就是个正负问题,按照你们数据逻辑统计就行了
    2025-02-14 11:11 
  • 2490322874 2490322874(提问者) 回复 华莉星宸 每太明白,底表里的方向就是汉字,借和贷
    2025-02-14 11:14 
  • 华莉星宸 华莉星宸 回复 2490322874(提问者) 你问问你们财务哈,借贷就是数据的正负问题
    2025-02-14 11:29 
最佳回答
0
Harry768Lv6见习互助
发布于2025-2-14 09:42
SELECT      account_id,     MAX(CASE WHEN balance_date = ${start_date} THEN opening_balance END) AS period_opening,     MAX(CASE WHEN balance_date = ${end_date THEN} closing_balance END) AS period_closing,     SUM(transaction_amount) AS total_transaction  FROM account_balance  WHERE balance_date BETWEEN ${start_date} AND ${end_date}  GROUP BY account_id

1.期初与期末取值 MAX(CASE ...):通过条件筛选直接获取指定日期的期初余额(opening_balance)和期末余额(closing_balance)。若表中存在多个账户,按account_id分组确保结果按账户区分

2.交易金额求和 SUM(transaction_amount):对时间范围内的所有交易金额求和

3.日期范围过滤 WHERE balance_date BETWEEN ...:筛选出时间范围内的记录,需确保输入的开始和结束日期在表中存在对应数据

  • 3关注人数
  • 33浏览人数
  • 最后回答于:2025-2-14 09:42
    请选择关闭问题的原因
    确定 取消
    返回顶部