SQL 语句请教

zestsnake 2018-03-20 01:46:46





有如上图所示的数据表和得到结果

其中 balance 是主表,1年约有1000W的记录 ,已做过分区
今年是2018年,那么就和 2017,2016 比年末的数据
如果是2019年,那么就和 2018,2017 比年末的数据,对比的数据表每年年末会产生,且只保留12.31的数据


最后一张图有点问题
1111 这个账号应该是
今日 比昨日 比上月末 比2017 比2016
100 30(100-70) -390 (100-490) 95(100-5) 40(100-60)

说明下,如果今天是 3月9日 ,那么就 要和 3月8日 ,2.28日比较下 (还得考虑下闰年)
...全文
470 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
中国风 2018-03-20
  • 打赏
  • 举报
回复
先用变量计算用的日期范围,再用以下方法CASE WHEN 。。。。去实现 建议用分区视图,把你的几个表创建为一个视图,在语句中引用视图,这可避免用动态语句去实现便于去实现 如:
create view vtab
as
select * from tab1
union all
select * from tab2
union all
..............
听雨停了 2018-03-20
  • 打赏
  • 举报
回复
引用 2 楼 zestsnake 的回复:
还有个问题,这个SQL 语句我是放在asp.net中用的,日期和年末,去年末这些我想都在asp.net中算好,再拼接语句。 问题是,如何算同一张 balance 中的数据, 如果今天是2月6日,那么还要在 balance 中选到 date=2018/2/5 和 date=2018/3/1的记录 ,如何能高效的完成?
已在另一个帖中回你,日期和年末,去年末这些你都不需要在程序中去完成,只需要把我回复你的sql封装成一个存储过程,每次调用存储过程就传一个日期进去就可以得到你要的数据了
zestsnake 2018-03-20
  • 打赏
  • 举报
回复
还有个问题,这个SQL 语句我是放在asp.net中用的,日期和年末,去年末这些我想都在asp.net中算好,再拼接语句。 问题是,如何算同一张 balance 中的数据, 如果今天是2月6日,那么还要在 balance 中选到 date=2018/2/5 和 date=2018/3/1的记录 ,如何能高效的完成?
zestsnake 2018-03-20
  • 打赏
  • 举报
回复
发下文本的数据,方便测试 balance 主表 balance_id 自动编号 balance_account 账号 balance_name 户名 balance_df 金额 balance_date 日期 测试数据 balance_id balance_account balance_name balance_df balance_date 1 1234 a 15 2018/1/1 2 1234 a 20 2018/1/31 3 1234 a 30 2018/2/5 4 1234 a 40 2018/2/6 5 1111 b 30 2018/1/1 6 1111 b 490 2018/1/31 7 1111 b 70 2018/2/5 8 1111 b 100 2018/2/6 balance2016 2017年 balance_id 自动编号 balance_account 账号 balance_name 户名 balance_df 金额 balance_date 日期 测试数据 balance_id balance_account balance_name balance_df balance_date 1 1234 a 10 2016/12/31 2 1111 b 5 2016/12/31 balance2017 2016年 balance_id 自动编号 balance_account 账号 balance_name 户名 balance_df 金额 balance_date 日期 测试数据 balance_id balance_account balance_name balance_df balance_date 1 1234 a 100 2017/12/31 2 1111 b 60 2017/12/31 得到结果是 如果今天是2月6日 balance_account balance_name 今日 比昨日 比上 月末 比2017 比2016 1234 a 40 10(40-30) 20(40-20) -10(40-50) -60(40-100) 1111 b 100 30(100-70) -390(100-490) 95(100-5) 40(100-60)

34,591

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧