oracle语句
有一个SQL表,为项目人员信息,有姓名、任职开始时间、任职结束时间,如何用SQL统计每个月在职总人数。

FineReport kjp123 发布于 2021-8-27 16:00
1min目标场景问卷 立即参与
回答问题
悬赏:3 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共5回答
最佳回答
0
Moki_minLv5初级互助
发布于2021-8-27 16:17

你可以做一个连续的日期表,date_id是主键;

select 月份,count(distinct  u.用户)as num

from 用户表  u

join 日期表  d on d.date_id between u.任职开始时间 and u.任职结束时间

group by 

月份

最佳回答
0
呼呼哈哈Lv5初级互助
发布于2021-8-27 16:03

SELECT COUNT(姓名)  FROM 项目人员信息 WHERE 任职结束时间 IS NULL 

最佳回答
0
snrtuemcLv8专家互助
发布于2021-8-27 16:03

假设你任职开始时间、任职结束时间是yyyy-MM-dd格式

select count(1) from 项目人员信息  where 任职开始时间>${today()}  and 任职结束时间<${today()}

  • kjp123 kjp123(提问者) 不对,统计历年每个月在职人数。不是目前人数
    2021-08-27 16:06 
最佳回答
0
青鸟ekkoLv6见习互助
发布于2021-8-27 16:36

select 年份,月份,count(id) from 表 group by 年份,月份

这里的年份和月份需要你从任职开始时间,和任职结束时间提取出来进行分组,

(不知道如何提取可以先百度一下)

这是大体框架,至于细节的处理,你可以在此基础上继续加

最佳回答
0
用户b5299530Lv5见习互助
发布于2021-8-27 16:57

select date_format(date_add(CURDATE(),interval -1 month),'%Y-%m') m,count(id)  from tablewhere rz_time <= last_day(date_add(CURDATE(),interval -1 month))and cz_time >= date_add(curdate() - day(curdate()) +1,interval -1 month )union allselect date_format(date_add(CURDATE(),interval -2 month),'%Y-%m') m,count(id)  from table

where rz_time <= last_day(date_add(CURDATE(),interval -2 month))and cz_time >= date_add(curdate() - day(curdate()) +1,interval -2 month )

。。。

rz_time  入职时间

cz_time  辞职时间

然后依次类推吧,每次减一个月向前推,没想到啥好办法,有新办法踩我一jio

  • 6关注人数
  • 538浏览人数
  • 最后回答于:2021-8-27 16:57
    请选择关闭问题的原因
    确定 取消
    返回顶部