sql怎么让日期对应job_lei,每月在职人数两列空的值就等于上个月的数,不空的值就等于本身
时间: 2024-10-27 09:02:01 浏览: 15
在SQL中,你可以使用窗口函数(Window Function)来实现这个需求,特别是在使用像`OVER()`这样的部分分组窗口函数时。假设有一个名为`employees`的表,其中包含`job_lei`、`hire_date`和`status`(在职状态)等字段,你可以尝试以下查询:
```sql
WITH monthly_counts AS (
SELECT
job_lei,
DATE_TRUNC('month', hire_date) AS month,
COUNT(*) OVER (
PARTITION BY job_lei, DATE_TRUNC('month', hire_date)
ORDER BY hire_date
ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING
) AS running_count
FROM
employees
WHERE
status = '在职'
)
SELECT
job_lei,
COALESCE(monthly_counts.running_count, LAG(monthly_counts.running_count, 1, NULL) OVER (PARTITION BY job_lei ORDER BY month)) AS monthly_in_workers
FROM
monthly_counts;
```
这个查询首先按月分组并计算每个`job_lei`每月的在职员工数(`running_count`)。然后,对于每个月份,如果当前月份的`running_count`为空,它会从上一个月的值取来填充;如果不为空,则直接使用该值。
阅读全文