我必须清楚地划分"Employee"
表的基础上,一周,然后得到计数的雇员增加了工作日。
示例结果:
| 周|周日|周一|星期二|周三|星期四|周五|周六|总|
| --|--|--|--|--|--|--|--|--|
| 2023年11月26日-2023年2月12日| 27 | 26 | 27 | 25 | 27 | 27 | 28 | 187 |
| 2023年3月12日至9月12日| 27 | 28 | 29 | 26 | 27 | 27 | 27 | 191 |
| 12/10/2023 - 12/16/2023| 27 | 0 | 0 | 0 | 0 | 0 | 0 | 27 |
色谱柱描述:
Week Column : [Start Date of the Week] - [End Date of the Week]
Sunday Column : Count of Employees Added on Sunday.
Monday Column : Count of Employees Added on Monday.
...
Total Column : Total Number of Employee on that Week.
字符串
输入表"Employee"
:
| “身份证”|“姓名”|“部门”|“JoiningEpoch”|“加入日期”|“CreatedEpoch”|
| --|--|--|--|--|--|
| 1 |罗宾|开发商| 1702706400 |2023-12-16 00:00:00| 1702706400 |
| 2 |EMP2| HR| 1702965600 |2019 -12-09 00:00:00| 1702965600 |
| 3 |EMP3| DevOps| 1701237600 |2019 -11-29 00:00:00| 1701237600 |
3条答案
按热度按时间sq1bmfud1#
要获取每周每个工作日添加的员工数量,可以使用
date_trunc()
函数按周和工作日对员工进行分组,然后使用count()
函数计算每组中的员工数量。类似于:字符串
看看它是否有效!
bkkx9g8r2#
您可以使用聚合
filter
子句在单独的列中获取日计数,通过减去1
从ISO 8601星期一开始向后移动一天,以查看从星期日开始的周范围,并使用to_char()
或设置DateStyle
设置以实现所需的日期格式:Demo at db<>fiddle字符串
| 周|周日|周一|周二|周三|周四|周五|周六|总|
| --|--|--|--|--|--|--|--|--|
| 2023年11月26日-2023年2月12日| 0 | 0 | 0 | 1 | 0 | 0 | 0 | 1 |
| 2023年3月12日至9月12日| 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 |
| 12/10/2023 - 12/16/2023| 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 |
在
tablefunc
扩展中还有一个crosstab()
函数可以自动以这种方式透视结果。cnh2zyt33#
因为我只能使用Postgres 9.5版本,
我们可以在Date上使用
DOW
得到“DayOfWeek”列,这个dow将有一周中的一天,如Sunday(0)到Saturday(6)。现在要获得一周的开始和结束日期,我们可以使用
INTERVAL
类型的[Start of the Week Date]减去“JoiningDate”和“DayOfWeek”列,并将6 -“DayOfWeek”interval
添加到“JoiningDate”中,用于[End of the Week Date]也可以使用TO_CHAR
的YYYY-MM-DD
用于“Week”列。稍后,为了对查询求和,我们可以在周列中使用
Group BY
,在“DayOfWeek”列中使用Sum
和Case
语句来获得每天的员工总数。字符串