您的当前位置:首页正文

sql server 日期近一年,同比

2023-11-10 来源:要发发知识网

近一年SELECT CONVERT(VARCHAR(10), DATEADD(dd, -DATEPART(dd, GETDATE()) + 1, DATEADD(MONTH, -11, GETDATE())), 23) SELECT CONVERT(VARCHAR, DATEADD(day, -DAY(GETDATE()), DATEADD(month, 1, GETDATE())), 23) --同比SELECT CONVERT(VARCHAR(10), DATEADD(dd, -DATEPART(dd, GETDATE()) + 1, DATEADD(MONTH, -23, GETDATE())), 23) SELECT CONVERT(VARCHAR, DATEADD(day, -DAY(GETDATE()), DATEADD(month, 1, DATEADD(MONTH, -12, GETDATE()))), 23)

 

sql server 日期近一年,同比

标签:bsp   style   同比   日期   div   sel   arch   get   arc   

小编还为您整理了以下内容,可能对您也有帮助:

怎么写sql 查询近一年的记录

1、首先我们要新建一个数据表,然后准备一些数据。

2、然后打开数据表的设计结构,看到ID字段是主键,一般默认的排序都是根据主键ID升序的。

3、接下来查询数据的时候运用order by将ID降序。

4、然后我们在Select后面在添加top 1的。

5、执行SQL语句以后就可以看到取出了一开始的最后一条记录了。

6、当然在某些数据库中还可以直接在order by后面添加limit来取一条。

请教Oracle计算同比和环比sql语句

首先明确概念:

环比增长率=(本期数-上期数)/上期数*100% 反映本期比上期增长了多少。

同比增长率=(本期数-同期数)/同期数*100% 指和去年同期相比较的增长率。

数据表名:d_temp_data 

查询数据如下: 

查询的sql语句如下:

select a.*,

       nvl(round(money/lag(money) over(order by id)*100,2),'0')||'%' "同比",

       nvl(round(money/lag(money) over(partition by mon order by id)*100,2),'0')||'%' "环比"

from d_temp_data a

     id    iname   year   mon   money   同比   环比

----------------------------------------------------------------------

11飞马股2013013000%0%

22飞马股20130227090%0%

33飞马股201303350129.63%0%

44飞马股20130418051.43%0%

55飞马股201305500277.78%0%

66飞马股20130640080%0%

77飞马股20140121052.5%70%

88飞马股201402240114.29%88.89%

99飞马股201403320133.33%91.43%

1010飞马股201404480150%266.67%

1111飞马股20140540083.33%80%

SQL里怎么查询销售同比与环比

这里有个同比和环比的例子。好好研究下就知道了。表结构如下:

ID DepartName(部门) Sales(销售量) SalesDate(销售日期)

1 营销一部 300 2006-7-1

2 营销二部 500 2006-7-1

3 营销三部 800 2006-8-1

4 营销一部 600 2006-8-1

5 营销二部 800 2006-8-1

6 营销一部 400 2007-7-1

7 营销二部 800 2007-7-1

8 营销三部 700 2007-8-1

9 营销一部 600 2008-7-1

10 营销二部 300 2008-7-1

要根据要求得到以下数据

1)选择开始年月,结束年月,得到同比数据

eg.开始年月:2006-7 结束:2006-8

获取:

对比年月 DepartName(部门) Sales(销售总量) 上期 差异 差异率

2006-7 营销一部 300 0 300 无穷大

2006-7 营销一部 500 0 500 无穷大

2006-7 营销三部 0 0 0 0

2006-8 .... ....

(2)选择月份 获取环比数据

eg.选择 2008.7

部门 本月销售总量 去年同期 变动 变动率

营销一部 600 0 0 0

营销二部 300 800 -500 (300-800)/800 Code

1--雇员数据

2CREATE TABLE Employee(

3ID int, --雇员编号(主键)

4Name nvarchar(10), --雇员名称

5Dept nvarchar(10)) --所属部门

6INSERT Employee SELECT 1,N'张三',N'大客户部'

7UNION ALL SELECT 2,N'李四',N'大客户部'

8UNION ALL SELECT 3,N'王五',N'销售一部'

9--费用表

10CREATE TABLE Expenses(

11EmployeeID int, --雇员编号

12Date Datetime, --发生日期

13Expenses nvarchar(10), --指标名称

14[Money] decimal(10,2)) --发生金额

15INSERT Expenses SELECT 1,'2004-01-01',N'销售',100

16UNION ALL SELECT 1,'2004-01-02',N'销售',150

17UNION ALL SELECT 1,'2004-12-01',N'销售',200

18UNION ALL SELECT 1,'2005-01-10',N'销售', 80

19UNION ALL SELECT 1,'2005-01-15',N'销售', 90

20UNION ALL SELECT 1,'2005-01-21',N'成本', 8

21UNION ALL SELECT 2,'2004-12-01',N'成本', 2

22UNION ALL SELECT 2,'2005-01-10',N'销售', 10

23UNION ALL SELECT 2,'2005-01-15',N'销售', 40

24UNION ALL SELECT 2,'2005-01-21',N'成本', 8

25UNION ALL SELECT 3,'2004-01-01',N'销售',200

26UNION ALL SELECT 3,'2004-12-10',N'销售', 80

27UNION ALL SELECT 3,'2005-01-15',N'销售', 90

28UNION ALL SELECT 3,'2005-01-21',N'销售', 8

29GO

30

31--统计

32DECLARE @Period char(6)

33SET @Period='200501' --统计的年月

34

35--统计处理

36DECLARE @Last_Period char(6),@Previous_Period char(6)

37SELECT @Last_Period=CONVERT(char(6),DATEADD(Year,-1,@Period+'01'),112),

38 @Previous_Period=CONVERT(char(6),DATEADD(Month,-1,@Period+'01'),112)

39SELECT Dept,Expenses,Name,

40 C_Money,

41 L_Money,

42 L_UP=C_Money-L_Money,

43 L_Prec=CASE

44 WHEN L_Money=0 THEN '----'

45 ELSE SUBSTRING('↓-↑',CAST(SIGN(C_Money-L_Money) as int)+2,1)

46 +CAST(CAST(ABS(C_Money-L_Money)*100/P_Money as decimal(10,2)) as varchar)+'%'

47 END,

48 P_Money,

49 P_UP=C_Money-P_Money,

50 P_Prec=CASE

51 WHEN P_Money=0 THEN '----'

52 ELSE SUBSTRING('↓-↑',CAST(SIGN(C_Money-P_Money) as int)+2,1)

53 +CAST(CAST(ABS(C_Money-P_Money)*100/P_Money as decimal(10,2)) as varchar)+'%'

54 END

55FROM(

56 SELECT a.Dept,b.Expenses,

57 Name=CASE WHEN GROUPING(Name)=1 THEN '<合计>' ELSE a.Name END,

58 C_Money=ISNULL(SUM(CASE CONVERT(char(6),b.Date,112) WHEN @Period THEN b.[Money] END),0),

59 L_Money=ISNULL(SUM(CASE CONVERT(char(6),b.Date,112) WHEN @Last_Period THEN b.[Money] END),0),

60 P_Money=ISNULL(SUM(CASE CONVERT(char(6),b.Date,112) WHEN @Previous_Period THEN b.[Money] END),0)

61 FROM Employee a,Expenses b

62 WHERE a.ID=b.EmployeeID

63 AND CONVERT(char(6),b.Date,112) IN(@Last_Period,@Previous_Period,@Period)

64 GROUP BY a.Dept,b.Expenses,a.ID,a.Name WITH ROLLUP

65 HAVING (GROUPING(a.Name)=0 OR GROUPING(a.ID)=1)

66 AND (GROUPING(a.ID)=0 OR GROUPING(b.Expenses)=0))a

67

68/**//*--结果

69Dept Expenses Name C_Money L_Money L_UP L_Prec P_Money P_UP P_Prec

70------- --------- -------- --------- -------- -------- -------- -------- -------- ------

71大客户部 成本 张三 8.00 .00 8.00 ---- .00 8.00 ----

72大客户部 成本 李四 8.00 .00 8.00 ---- 2.00 6.00 ↑300.00%

73大客户部 成本 <合计> 16.00 .00 16.00 ---- 2.00 14.00 ↑700.00%

74大客户部 销售 张三 170.00 250.00 -80.00 ↓32.00% 200.00 -30.00 ↓15.00%

75大客户部 销售 李四 50.00 .00 50.00 ---- .00 50.00 ----

76大客户部 销售 <合计> 220.00 250.00 -30.00 ↓12.00% 200.00 20.00 ↑10.00%

77销售一部 销售 王五 98.00 200.00 -102.00 ↓51.00% 80.00 18.00 ↑22.50%

78销售一部 销售 <合计> 98.00 200.00 -102.00 ↓51.00% 80.00 18.00 ↑22.50%

79--*/

80

81

82

SQL SEVER求和算同比

select 月份,(SUM(case when 年份=2015 then 出口量 else 0 end)-SUM(case when 年份=2014 then 出口量 else 0 end))*100.0/SUM(case when 年份=2014 then 出口量 else 0 end) 增长率百分比

    from [hgsj].[dbo].[seamless]

       where 年份 in(2014,2015)

          group by 月份

追问你写的语句格式非常好。我是想算(2015年1-9月和值-2014年1-9月和值)/2014年1-9月和值),结果就是一个数。

追答select (SUM(case when 年份=2015 then 出口量 else 0 end)-SUM(case when 年份=2014 then 出口量 else 0 end))*100.0/SUM(case when 年份=2014 then 出口量 else 0 end) 增长率百分比

from [hgsj].[dbo].[seamless]

where 年份 in(2014,2015) AND 月份 between '01' and '09'