教你轻松学会SQL Server记录轮班的技巧

作者:ganlanshu 时间:2009-02-19 17:38:00 

例:公司员工采取三个轮班制度:凌晨0:00到早上8:00为第一班,早上8:00到下午4:00为第二班,下午4:00到晚上12:00为第三班。

员工使用电子时钟进行签名,这种电子签名可以自动将记录添加到SQL Server数据库中。但是,有时候,需要增加一个夜班;即使这个轮班发生在第二天,它仍然会被认为是第三班。

你也许希望根据轮班对记录进行分组,但是在你的计划中会有两个非常令人头痛的问题:

(1)不是所有的雇员都是按时到达的;

(2)有时候员工工作的时间会比他们的一个轮班的时间长一些。

为了能在你的列表中得到正确的分组,你必须假设所有的员工能在一个轮班的开始和结束时间之间的任意时间开始工作。

使用CASE语句是一种解决办法。Listing A中的SQL语句告诉我们,在创建测试表没有错误的情况下,它是如何工作的。

为了使程序代码完全准确的运行,你需要在时间的小窗口中得到每一个轮班的开始时间和下一个轮班的结束时间。在刚才的例子中,你可以用'15:59:59.123'这个值代替@StartTime,然后再重新运行代码。这时候,你必须在每一个轮班结束的分界点上增加999毫秒。

解决方案

这个例子假设轮班时间从来没有改变过,但是如果改变了轮班时间该怎么办呢?你必须仿照这个例子并根据改变了的时间写出所有的代码。

一个更好一点的主意就是,针对我们的轮班创建一个表来调用Shifts的开始时间和结束时间。在这个表中,你可以修改Case语句来查找StopTime列。


Listing B中包含了创建Shifts表并向该表中增加记录的代码。代码在一个轮班中设置了时间后,这样使代码看上去既简单又灵活:


DECLARE @StartTime VARCHAR(20)

SET @StartTime ='22:59:59'

SELECTTOP 1 ShiftName FROM ShiftWork.Shifts

WHERE Shifts.StartTime <= @StartTime

ORDERBY StartTime DESC

我之所以要将轮班记录进行降序排列,是为了避免第三个轮班的边界问题。我将用一些测试案例来论证我的结论,这些内容你可以在Listing C中看到。

实际上,你可以将这个逻辑应用到TemeCards表的记录中去,而不需要创建另外的表,也就不需要在表中增加数据了。我同样使用一个简单的变量来论证我的逻辑。

标签:轻松学会SQL,Server,轮班,技巧
0
投稿

猜你喜欢

  • 如何对MySQL数据库表进行锁定

    2009-02-10 10:39:00
  • python的移位操作实现详解

    2021-05-05 22:51:30
  • Python MongoDB 插入数据时已存在则不执行,不存在则插入的解决方法

    2022-11-16 20:48:41
  • php静态化页面 htaccess写法详解(htaccess怎么写?)

    2023-11-14 22:33:03
  • python 虚拟环境的创建与使用方法

    2022-11-09 18:21:50
  • dl.dt.dd.ul.li.ol区别及应用

    2008-05-24 09:42:00
  • 解决Pycharm调用Turtle时 窗口一闪而过的问题

    2023-05-06 14:46:29
  • Windows系统下实现pycharm运行.sh文件(本地运行和打开服务器终端)

    2021-03-04 23:53:45
  • Bootstrap实现登录校验表单(带验证码)

    2024-05-10 14:08:37
  • hadoop迁移数据应用实例详解

    2022-12-28 01:29:45
  • Tornado Web Server框架编写简易Python服务器

    2021-10-18 09:23:52
  • Golang中使用JSON的一些小技巧分享

    2024-04-27 15:33:34
  • Vue实现自定义下拉菜单功能

    2024-05-09 15:19:14
  • JavaScript实现的反序列化json字符串操作示例

    2024-04-10 10:46:01
  • 一篇文章弄懂PHP和HTML的嵌套写法

    2023-06-20 04:51:22
  • Python ORM框架之SQLAlchemy 的基础用法

    2023-06-09 18:03:41
  • 如何提升JavaScript的运行速度(函数篇)

    2010-05-17 13:27:00
  • python删除文件夹下相同文件和无法打开的图片

    2023-03-09 19:26:42
  • Python中优雅使用assert断言的方法实例

    2021-03-27 12:56:58
  • 如何取得刚添加的记录自动增加的ID?

    2010-01-18 20:55:00
  • asp之家 网络编程 m.aspxhome.com