SQL总结:
1.连续最长加班天数
原表数据如下:(id:加班者id,通俗就是谁加班。日期:哪天加的班。flag:是否加班标志,1代表这个人在这个日期加班,0代表没加班)
id | 日期 | flag |
1 | 20130101 | 1 |
1 | 20130102 | 1 |
1 | 20130103 | 0 |
1 | 20130104 | 1 |
1 | 20130105 | 1 |
1 | 20130106 | 1 |
得出结果集应是:
ID | start_date | end_date | days |
1 | 20130104 | 20130106 | 3 |
SQLSERVER数据库测试过的脚本:
with t1 as (
select id,date-row_number()over(partition by id order by date) rn,date from dbo.test_overtime where flag=1), t2 as (select id,max(date) end_date,min(date) start_date,count(1)lianxu from t1 group by rn,id)select * from t2 where lianxu in (select max(lianxu) from t2 group by id)
2..部门员工的累加出账
原始数据如下:
部门ID | 员工ID | 年月 | 出账数目 |
1 | 21 | 199601 | 3000 |
1 | 21 | 199602 | 4000 |
1 | 21 | 199603 | 4000 |
1 | 21 | 199604 | 5000 |
2 | 31 | 199601 | 1000 |
2 | 31 | 199602 | 2000 |
2 | 31 | 199603 | 3000 |
结果表:
部门 | 年月 | 出账 |
1 | 199601 | 3000 |
1 | 199602 | 7000 |
1 | 199603 | 11000 |
1 | 199604 | 16000 |
1 | 199601 | 1000 |
1 | 199602 | 3000 |
1 | 199603 | 6000 |
脚本:
SELECT DEP,YEARDATE,
SUM(CHUZHANG) OVER(PARTITION BY DEP order by YEARDATE RANGE BETWEEN UNBOUNDed preceding and preceding )
FROM TEST