教你轻松学会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表的记录中去,而不需要创建另外的表,也就不需要在表中增加数据了。我同样使用一个简单的变量来论证我的逻辑。


猜你喜欢
- tensorflow作为google开源的项目,现在赶超了caffe,好像成为最受欢迎的深度学习框架。确实在编写的时候更能感受到代码的真实存
- 上一篇文章讲解了如何实现马丁策略,但没有探索其泛化能力,所以这次来尝试回测3000只股票来查看盈利比例。批量爬取股票数据这里爬取数据继续使用
- 前几天在把一个Communtiy Server 的数据库从SQL 2000升级到SQL 2005&n
- 当设计一个产品,其中很多地方要把日期类型保存到数据库中,如果产品有兼容不同数据库产品的需求,那么,应当怎样设计呢?当然,首先想到的是,使用数
- 如何创建一个Python工程并使其具有Pycharm的代码风格,具体如下1、主题这部分教程主要介绍如何创建一个Python工程并使其具有Py
- 我们在选择一件商品的时候,会先了解一些相关的商品信息,根据自己的需求和情况再进行选择。这种现象也同样适用于找工作,筛选一个岗位的重要环节,就
- 使用 Django 或 Flask 这种框架开发 web app 的时候一般都会用内建服务器开发和调试程序,等程序完成后再移交到生产环境部署
- 我就废话不多说了,大家还是直接看代码吧!# -*- coding: utf-8 -*-"""Created o
- 如何保证消息不丢失在使用RabbitMQ的时候,我们需要保证消息不能丢失,消息从生产者生产出来一直到消费者消费成功,这条链路是这样的:消息的
- 一般在更新时会遇到以下场景:1.所有字段全部更新;2.根据条件更新字段中的某部分内容;3.根据不同的条件更新不同的值以下是几种场景中常用的u
- 我就废话不多说了,大家还是直接看代码吧~import tensorflow as tfh_doc=tf.placeholder(tf.int
- 前言入门爬虫很容易,几行代码就可以,可以说是学习 Python 最简单的途径。刚开始动手写爬虫,你只需要关注最核心的部分,也就是先成功抓到数
- 1、 设置WriteHeader的顺序问题之前遇到个问题,在一段代码中这样设置WriteHeader,最后在header中取Name时怎么也
- 前言可扩展标记语言,是一种简单的数据存储语言,XML被设计用来传输和存储数据存储,可用来存放配置文件,例:java配置文件传输,网络传输以这
- 目录前言掘金的成长搬家命令行工具环境配置main.pycookie.jsongithub 地址前言最近不少写博客的朋友跟我反馈博客园的一些文
- 一、MySQL Workbench的下载Workbench是MySql图形化的管理工具,可以在Workbench里输入MySql的语句,这可
- JSP之表单提交get和post的详解及实例一 get和post的区别二 实战(post方式提交)1、login.jsp<%@ pag
- 在工作实践和学习中,如何开启 MySQL 数据库的远程登陆帐号算是一个难点的问题,以下内容便是在工作和实践中总结出来的两大步骤,能帮助DBA
- 一、json_encode() 对变量进行JSON编码语法:json_encode($value[,$options=0])注意: 
- 现在用MSSQL的地方太多了,有很多做技术的个人电脑上也安装SQL专业版,因为它用的多,但用的人都知道,SQL有个超级用户sa,此用户默认情