原文:在论坛中出现的比较难的sql问题:7(子查询 判断某个字段的值是否连续)


最近,在论坛中,遇到了不少比较难的sql问题,虽然自己都能解决,但发现过几天后,就记不起来了,也忘记解决的方法了。

所以,觉得有必要记录下来,这样以后再次碰到这类问题,也能从中获取解答的思路。

1、求一个聚合的SQL该怎么写

http://bbs.csdn.net/topics/390640648?page=1#post-396068172

有这样的数据
员工    开始日期                     终了日期
A       2013-05-01 00:00:00.000      2013-06-08 00:00:00.000
A       2013-09-02 00:00:00.000      2013-12-31 00:00:00.000
A       2013-09-05 00:00:00.000      NULL

求员工A的所能表示的最大范围的日期,取日期的并集,最后结果应该如下:
员工    开始日期                     终了日期
A       2013-05-01 00:00:00.000      2013-06-08 00:00:00.000
A       2013-09-02 00:00:00.000      NULL

请问谁知道这样的SQL语句该如何写。

我的解法:


  1. ;with t(员工 , 开始日期,终了日期)
  2. as
  3. (
  4. select 'A', '2013-05-01 00:00:00.000','2013-06-08 00:00:00.000'
  5. union all select 'A','2013-09-02 00:00:00.000','2013-12-31 00:00:00.000'
  6. union all select 'A','2013-09-05 00:00:00.000',NULL
  7. union all select 'A','2013-09-15 00:00:00.000', '2013-11-08 00:00:00.000'
  8. ),
  9. tt
  10. as
  11. (
  12. select 员工,开始日期,终了日期,
  13. (select MIN(t2.开始日期)
  14. from t t2
  15. where t1.员工 = t2.员工
  16. and t1.开始日期 between t2.开始日期 and isnull(t2.终了日期,'3000-01-01')
  17. ) as min_开始日期,
  18. (select max(isnull(t2.终了日期,'3000-01-01'))
  19. from t t2
  20. where t1.员工 = t2.员工
  21. and t1.开始日期 between t2.开始日期 and isnull(t2.终了日期,'3000-01-01')
  22. ) as max_终了日期
  23. from t t1
  24. )
  25. select 员工,min_开始日期 as 开始日期,
  26. nullif(max(max_终了日期),'3000-01-01') as 终了日期
  27. from tt
  28. group by 员工,min_开始日期
  29. /*
  30. 员工 开始日期 终了日期
  31. A 2013-05-01 00:00:00.000 2013-06-08 00:00:00.000
  32. A 2013-09-02 00:00:00.000 NULL
  33. */

2、sql中怎么判断某个字段的值是否连续?

http://bbs.csdn.net/topics/390615670

比如:A表的字段AID的值为:1、2、4、5、7、8、10

怎么用sql查询出2、5、8的结果呢?

要查的结果就是查询这组数据从哪里开始不连续的。

我的解法:


  1. create table A(AID int)
  2. insert into A(AID)
  3. select 1 union all
  4. select 2 union all
  5. select 4 union all
  6. select 5 union all
  7. select 7 union all
  8. select 8 union all
  9. select 10
  10. select aid
  11. from
  12. (
  13. select a.aid,
  14. (select min(aid) from a aa where aa.aid > a.aid) min_aid
  15. from A
  16. )a
  17. where aid +1 < min_aid
  18. /*
  19. aid
  20. 2
  21. 5
  22. 8
  23. */
发布了416 篇原创文章 · 获赞 135 · 访问量 94万+

在论坛中出现的比较难的sql问题:7(子查询 判断某个字段的值是否连续)的更多相关文章

  1. 在论坛中出现的比较难的sql问题:27(字符串拆分、字符串合并、非连续数字的间隔范围、随机返回字符串)

    原文:在论坛中出现的比较难的sql问题:27(字符串拆分.字符串合并.非连续数字的间隔范围.随机返回字符串) 在论坛中看到一个帖子,帖子中有一些sql方面的面试题,我觉得这些面试题很有代表性. 原帖的 ...

  2. 在论坛中出现的比较难的sql问题:46(日期条件出现的奇怪问题)

    原文:在论坛中出现的比较难的sql问题:46(日期条件出现的奇怪问题) 最近,在论坛中,遇到了不少比较难的sql问题,虽然自己都能解决,但发现过几天后,就记不起来了,也忘记解决的方法了. 所以,觉得有 ...

  3. 在论坛中出现的比较难的sql问题:45(用户在线登陆时间的小时、分钟计算问题)

    原文:在论坛中出现的比较难的sql问题:45(用户在线登陆时间的小时.分钟计算问题) 最近,在论坛中,遇到了不少比较难的sql问题,虽然自己都能解决,但发现过几天后,就记不起来了,也忘记解决的方法了. ...

  4. 在论坛中出现的比较难的sql问题:44(触发器专题 明细表插入数据时调用主表对应的数据)

    原文:在论坛中出现的比较难的sql问题:44(触发器专题 明细表插入数据时调用主表对应的数据) 最近,在论坛中,遇到了不少比较难的sql问题,虽然自己都能解决,但发现过几天后,就记不起来了,也忘记解决 ...

  5. 在论坛中出现的比较难的sql问题:42(动态行转列 考勤时间动态列)

    原文:在论坛中出现的比较难的sql问题:42(动态行转列 考勤时间动态列) 所以,觉得有必要记录下来,这样以后再次碰到这类问题,也能从中获取解答的思路.

  6. 在论坛中出现的比较难的sql问题:41(循环替换 循环替换关键字)

    原文:在论坛中出现的比较难的sql问题:41(循环替换 循环替换关键字) 所以,觉得有必要记录下来,这样以后再次碰到这类问题,也能从中获取解答的思路.

  7. 在论坛中出现的比较难的sql问题:40(子查询 销售和历史库存)

    原文:在论坛中出现的比较难的sql问题:40(子查询 销售和历史库存) 最近,在论坛中,遇到了不少比较难的sql问题,虽然自己都能解决,但发现过几天后,就记不起来了,也忘记解决的方法了. 所以,觉得有 ...

  8. 在论坛中出现的比较难的sql问题:39(动态行转列 动态日期列问题)

    原文:在论坛中出现的比较难的sql问题:39(动态行转列 动态日期列问题) 最近,在论坛中,遇到了不少比较难的sql问题,虽然自己都能解决,但发现过几天后,就记不起来了,也忘记解决的方法了. 所以,觉 ...

  9. 在论坛中出现的比较难的sql问题:38(字符拆分 字符串检索问题)

    原文:在论坛中出现的比较难的sql问题:38(字符拆分 字符串检索问题) 最近,在论坛中,遇到了不少比较难的sql问题,虽然自己都能解决,但发现过几天后,就记不起来了,也忘记解决的方法了. 所以,觉得 ...

随机推荐

  1. Git如何永久删除某个重要文件文件或文件夹 (包括历史记录) 强制

    有些时候不小心上传了一些敏感文件(例如密码), 或者不想上传的文件(没及时或忘了加到.gitignore里的), 而且上传的文件又特别大的时候, 这将导致别人clone你的代码或下载zip包的时候也必 ...

  2. scroll-view组件实现下拉刷新, 拉到底加载更多

    官方文档已声明,即使在page.json和app.json中开启下拉刷新,scroll-view组件也是不支持的.但我们可以通过曲线救国的方法来实现 实现代码 // wxml <scroll-v ...

  3. Oracle的大表,小表与全表扫描

    大小表区分按照数据量的大小区分: 通常对于小表,Oracle建议通过全表扫描进行数据访问,对于大表则应该通过索引以加快数据查询,当然如果查询要求返回表中大部分或者全部数据,那么全表扫描可能仍然是最好的 ...

  4. Mac使用brew安装nginx,并解决端口80访问权限问题

    1.安装 brew install nginx 2.修改配置文件 sudo vi /usr/local/etc/nginx/nginx.conf 修改默认的8080端口为80 修改日志文件地方 err ...

  5. Docs-.NET-C#-指南-语言参考-预处理器指令:#error(C# 参考)

    ylbtech-Docs-.NET-C#-指南-语言参考-预处理器指令:#error(C# 参考) 1.返回顶部 1. #error(C# 参考) 2015/07/20 #error 可从代码中的特定 ...

  6. python 适合的才是最好的

    群里老有人问最新的破解码最新的包,最新的就是最好的吗? 今天说一下这些新手的坑: numpy 最好使用的版本是1.13.3  而非新的1.17.0 pandas最好使用的版本是0.18.0 而非新的0 ...

  7. 问题:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.5.1:compile (default-compile)

    一:问题 今天编译maven 项目构建失败,提示内容如下: [ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler ...

  8. HttpClient结合PostMethod调用接口

    HttpClient结合PostMethod调用接口   解决方法: HttpClient client = new HttpClient(); PostMethod post = new PostM ...

  9. 123457123457#0#-----com.threeapp.mouseRunner01----儿童老鼠跑酷游戏

    com.threeapp.mouseRunner01----儿童老鼠跑酷游戏

  10. Casbin 使用记录

    Casbin 是什么? 官方解释:Casbin是一个强大的.高效的开源访问控制框架,其权限管理机制支持多种访问控制模型. Casbin只负责访问控制.身份认证 authentication(即验证用户 ...