SQLserver通过group和case按日期等分
(2020-02-07 10:20:26)
标签:
sqlcasegroupwhencast |
分类: 代码天地 |
SQL 数据库表通过 group 和 case 达到按日期等分的效果
1 数据库表 Table_A 的
结构
id int , salary
int , val int , dt
datetime
2 数据库表 Table_A 的 数据
select * from Table_A
id salary val dt
1 10
11
2020-01-01
2 150
151
2020-01-01
3 400
401
2020-01-02
4 300
301
2020-01-05
5 520
521
2020-02-01
6 580
581
2020-02-01
7 570
571
2020-02-02
8 630
631
2020-02-03
9 700
701
2020-02-04
10 690
691
2020-02-05
11 850
851 2020-02-06
12 1000
1001 2020-02-07
13 900
901 2020-02-08
14 950
951
2020-02-09
3 按数值分类
SELECT COUNT(*) as num ,
MAX(salary) as salary, MAX(val) as val FROM Table_A
GROUP BY
结果如下:
num salary val
4 400 401
3 580 581
3 700 701
4 1000 1001
SELECT COUNT(*) as num ,
MAX(salary) as salary, MAX(val) as val FROM Table_A
GROUP BY
结果如下:
num salary val
4 400 401
3 580 581
3 700 701
4 1000 1001
5
按日期作为日期分类
SELECT COUNT(*) as num ,
MAX(salary) as salary, MAX(val) as val,MAX(dt) as dt FROM
Table_A
GROUP BY
结果如下:
num salary val dt
4 400 401
2020-01-05
3 580 581
2020-02-02
3 700 701
2020-02-05
4 1000
1001
2020-02-09
6 简化日期类型
SELECT COUNT(*) as num ,
MAX(salary) as salary, MAX(val) as val,MAX(dt) as dt FROM
Table_A
GROUP BY
结果同上面的一样如下:
num salary val dt
4 400 401
2020-01-05
3 580 581
2020-02-02
3 700 701
2020-02-05
4 1000
1001
2020-02-09
7 理想日期类型
多数情况下,日期时间要达到时分秒的单位,因为sql 的 拼接子串varchar 和 nvarchar
最大长度是8000,为了能容纳更多的分类,可将结果分类从时间格式缩短为序号,返回数据集后再把序号转成时间即可
WHEN dt > '2020/01/31 03:09:23' AND dt <= '2020/02/02
06:18:46' THEN 2
这样以来,按日期循环拼接语句,达到按日期等分的效果。
可以增加一个字段 xh int, 把上面的分类序号赋值给它,然后
新的样例结果如下:
salary val xh dt
10 11 1 2013-06-15 17:39:51
150 151 2 2013-06-15 19:20:46
400 401 3 2013-06-15 21:01:41
300 301 4 2013-06-15 22:42:36
520 521 5 2013-06-16 00:23:31
580 581 6 2013-06-16 02:04:26
570 571 7 2013-06-16 03:45:21
630 631 8 2013-06-16 05:26:16
700 701 9 2013-06-16 07:07:11
690 691 10 2013-06-16 08:48:06
850 851 11 2013-06-16 10:29:01
1000 1001 12 2013-06-16 12:09:56
900 901 13 2013-06-16 13:50:51
950 951 14 2013-06-16 15:31:46