当前位置:   article > 正文

T-SQL:一道医院信息科的面试题_信息科面试题

信息科面试题

得到一份1200多人的Excel格式名单(含手机号,姓名),为其做一个接种疫苗计划。

具体要求:
将名单中的人员随机排序形成一个新次序。按这个次序,每150人分为一组。第一组的接种时间是7:30-8:30,第二组是8:30-9:30.......依次类推。组内不再区分次序。

试使用MSSQL生成这个接种计划表。形如 姓名、手机号、接种时段。

我的方案:
关键点1、导入数据到数据库。由于源文件是Excel,存在64位兼容性问题,因此先另存为csv之类的平面文件再导入。
关键点2、随机排序。其实MSSQL T-SQL对于随机排序有个小技巧,order by newid()即可。 用个带自增长ID字段的表保存随机排序结果。因为仅1200多条记录不算多,可暂不考虑索引。
关键点3、150分组及对应时段。本质上可以看作新序号与时间增量的一个对应关系。很容易想到用新序号除以150,取整,即可得到第几批次。基准时间+批次号(看作小时)就是结果。战术上运用到的内置函数可以是DateAdd(小时,增量,基量)。

  1. --CSV导入数据库表过程略。
  2. --初步生成结果表,并保存随机排序结果
  3. create table 结果表 (id int identity(0,1) ,name varchar(255),mp varchar(255))
  4. go
  5. insert 结果表(name,mp)
  6. select name,mp from CSV导入表 order by newid()
  7. go
  8. -- 验证
  9. select * from 结果表 order by id
  10. go
  11. -- 增加接种时间字段
  12. alter table 结果表 add jzsj datetime null
  13. go
  14. -- 先强制都设置为基准时间
  15. update 结果表 set jzsj = '2020-12-30 07:30:00'
  16. go
  17. -- 按批次更新
  18. update 结果表 set jzsj = dateadd(hh,id/150,jzsj)
  19. go

核心问题解决。

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/435561
推荐阅读
相关标签
  

闽ICP备14008679号