You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何创建视图获取所有员工的月末快照列表?

需求:基于Employees表创建月末状态视图

原始Employees表结构及数据

IdCreatedOnName
12023-04-12Mark
22023-04-28Luke
32023-05-15Nina
42023-05-29Karl
52023-06-17Kara
62023-06-30Jack

目标视图结构及数据

IdCreatedOnNameMonth
12023-04-12Mark2023-04-30
22023-04-28Luke2023-04-30
12023-04-12Mark2023-05-31
22023-04-28Luke2023-05-31
32023-05-15Nina2023-05-31
42023-05-29Karl2023-05-31
12023-04-12Mark2023-06-30
22023-04-28Luke2023-06-30
32023-05-15Nina2023-06-30
42023-05-29Karl2023-06-30
52023-06-17Kara2023-06-30
62023-06-30Jack2023-06-30

当前实现方式

目前通过创建新表,每月月末手动插入数据实现上述展示效果,但希望改用视图(View)完成需求。

原始表创建脚本

CREATE TABLE Employees (
    Id INT,
    CreatedOn DATE,
    Name VARCHAR(50)
);

INSERT INTO Employees (Id, CreatedOn, Name)
VALUES
    (1, '2023-04-12', 'Mark'),
    (2, '2023-04-28', 'Luke'),
    (3, '2023-05-15', 'Nina'),
    (4, '2023-05-29', 'Karl'),
    (5, '2023-06-17', 'Kara'),
    (6, '2023-06-30', 'Jack');

解决方案:创建视图实现需求

完全可以通过视图实现,核心逻辑是生成需要统计的月末日期,再将每个员工数据与大于等于其入职月份的月末日期关联。以下是不同数据库的实现示例:

MySQL版本

CREATE VIEW EmployeeMonthEndStatus AS
WITH MonthEnds AS (
    SELECT LAST_DAY('2023-04-01') AS MonthEnd UNION ALL
    SELECT LAST_DAY('2023-05-01') UNION ALL
    SELECT LAST_DAY('2023-06-01')
)
SELECT 
    e.Id,
    e.CreatedOn,
    e.Name,
    me.MonthEnd AS Month
FROM Employees e
JOIN MonthEnds me ON e.CreatedOn <= me.MonthEnd
ORDER BY me.MonthEnd, e.Id;

SQL Server版本(自动生成有员工入职的月份)

CREATE VIEW EmployeeMonthEndStatus AS
WITH DistinctMonths AS (
    SELECT DISTINCT DATEFROMPARTS(YEAR(CreatedOn), MONTH(CreatedOn), 1) AS MonthStart
    FROM Employees
),
MonthEnds AS (
    SELECT EOMONTH(MonthStart) AS MonthEnd
    FROM DistinctMonths
)
SELECT 
    e.Id,
    e.CreatedOn,
    e.Name,
    me.MonthEnd AS Month
FROM Employees e
JOIN MonthEnds me ON e.CreatedOn <= me.MonthEnd
ORDER BY me.MonthEnd, e.Id;

说明

  • 视图会自动同步Employees表的更新,无需手动维护数据
  • 若需限定特定月份范围,可修改MonthEnds公共表表达式中的日期筛选条件

内容的提问来源于stack exchange,提问作者qudsif

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 23:31:01