员工的 SQL 时间表

Posted

技术标签:

【中文标题】员工的 SQL 时间表【英文标题】:SQL timetable for employee 【发布时间】:2010-04-25 15:33:35 【问题描述】:

我需要创建一个员工轮班数据库。所以到目前为止我有 3 个表,employee、employee_shift 和 shift

我想计算一个员工在月底做了多少班次,我的问题是,因为一个月有 30 天,有些有 28 天和 31 天。

这意味着我需要在班次表中创建 31 个不同的变体?每个月的每一天一个?为了计算出哪个员工工作得最多?

在我的业务关系中,它说员工每天有 1 或 2 个班次,因此我必须有 60 行不同的变化吗?我是对的,或者有一个简单的方法来解决它

【问题讨论】:

【参考方案1】:

我会像这样使用三个表:

Employee - EmployeeId, EmployeeName etc.
ShiftRecords - ShiftRecordId, EmployeeId, InTime, OutTime
Shift - ShiftId, ShiftStartTime, ShiftEndTime

如果轮班时间可能会有所不同,您可以在轮班表中包括轮班开始日期和结束日期以及 IsActive 列。

【讨论】:

您能否创建一个选择语句来显示某个月班次最高的员工【参考方案2】:

我还会坚持三个表,Employee、Shifts 和 Employee_InOut。最后一个表将包含日期、时间和时间的列。上班时间和下班时间将是找出员工正在轮班的关键。因此,我可以只计算一个月的轮班次数以及员工的轮班详细信息。会很简单。

【讨论】:

没有。你不 - 你应该找人帮你设计,因为如果你尝试一个 60 字段的表,那么你基本上是试图设计一个 sql 数据库的盲人。请公司里的人来帮助你。了解 SQL 基础知识的人。然后学习;) 回到 RDBMS 和规范化的基础。放置这么多字段会限制您的灵活性,只会增加许多倍的复杂性。【参考方案3】:
    您不能将数据插入到 TimeStamp 列中。请改用时间。 您不能将 Emp_Id 和 Shift_Id 作为主键,因为这样会重复。如果您确实需要主键,请添加另一列,例如 Shift_Record_Id。

就创建脚本而言,它应该很简单。您只需要弄清楚一个逻辑并阅读我们可以在其中使用的 select 语句和可用关键字。

【讨论】:

以上是关于员工的 SQL 时间表的主要内容,如果未能解决你的问题,请参考以下文章

SQL数据库设计时间表员工与工作人员

简单的sql分组统计

查询在2月份入职的所有员工信息sql语句如何写?

sql数据库的视图和 存储过程怎么建?

使用差距和孤岛知识找到最长时间不改变就业(SQL)

T-SQL:计算员工的总工资