在论坛中出现的比较难的sql问题:7(子查询 判断某个字段的值是否连续)
原文:在论坛中出现的比较难的sql问题:7(子查询 判断某个字段的值是否连续)
所以,觉得有必要记录下来,这样以后再次碰到这类问题,也能从中获取解答的思路。
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语句该如何写。
我的解法:
-
;with t(员工 , 开始日期,终了日期)
-
as
-
(
-
select 'A', '2013-05-01 00:00:00.000','2013-06-08 00:00:00.000'
-
union all select 'A','2013-09-02 00:00:00.000','2013-12-31 00:00:00.000'
-
union all select 'A','2013-09-05 00:00:00.000',NULL
-
union all select 'A','2013-09-15 00:00:00.000', '2013-11-08 00:00:00.000'
-
),
-
-
tt
-
as
-
(
-
select 员工,开始日期,终了日期,
-
(select MIN(t2.开始日期)
-
from t t2
-
where t1.员工 = t2.员工
-
and t1.开始日期 between t2.开始日期 and isnull(t2.终了日期,'3000-01-01')
-
) as min_开始日期,
-
-
(select max(isnull(t2.终了日期,'3000-01-01'))
-
from t t2
-
where t1.员工 = t2.员工
-
and t1.开始日期 between t2.开始日期 and isnull(t2.终了日期,'3000-01-01')
-
) as max_终了日期
-
from t t1
-
)
-
-
select 员工,min_开始日期 as 开始日期,
-
nullif(max(max_终了日期),'3000-01-01') as 终了日期
-
from tt
-
group by 员工,min_开始日期
-
/*
-
员工 开始日期 终了日期
-
A 2013-05-01 00:00:00.000 2013-06-08 00:00:00.000
-
A 2013-09-02 00:00:00.000 NULL
-
*/
-
2、sql中怎么判断某个字段的值是否连续?
http://bbs.csdn.net/topics/390615670
比如:A表的字段AID的值为:1、2、4、5、7、8、10
怎么用sql查询出2、5、8的结果呢?
要查的结果就是查询这组数据从哪里开始不连续的。
我的解法:
-
create table A(AID int)
-
-
insert into A(AID)
-
select 1 union all
-
select 2 union all
-
select 4 union all
-
select 5 union all
-
select 7 union all
-
select 8 union all
-
select 10
-
-
select aid
-
from
-
(
-
select a.aid,
-
(select min(aid) from a aa where aa.aid > a.aid) min_aid
-
from A
-
)a
-
where aid +1 < min_aid
-
/*
-
aid
-
2
-
5
-
8
-
*/
在论坛中出现的比较难的sql问题:7(子查询 判断某个字段的值是否连续)的更多相关文章
- 在论坛中出现的比较难的sql问题:27(字符串拆分、字符串合并、非连续数字的间隔范围、随机返回字符串)
原文:在论坛中出现的比较难的sql问题:27(字符串拆分.字符串合并.非连续数字的间隔范围.随机返回字符串) 在论坛中看到一个帖子,帖子中有一些sql方面的面试题,我觉得这些面试题很有代表性. 原帖的 ...
- 在论坛中出现的比较难的sql问题:46(日期条件出现的奇怪问题)
原文:在论坛中出现的比较难的sql问题:46(日期条件出现的奇怪问题) 最近,在论坛中,遇到了不少比较难的sql问题,虽然自己都能解决,但发现过几天后,就记不起来了,也忘记解决的方法了. 所以,觉得有 ...
- 在论坛中出现的比较难的sql问题:45(用户在线登陆时间的小时、分钟计算问题)
原文:在论坛中出现的比较难的sql问题:45(用户在线登陆时间的小时.分钟计算问题) 最近,在论坛中,遇到了不少比较难的sql问题,虽然自己都能解决,但发现过几天后,就记不起来了,也忘记解决的方法了. ...
- 在论坛中出现的比较难的sql问题:44(触发器专题 明细表插入数据时调用主表对应的数据)
原文:在论坛中出现的比较难的sql问题:44(触发器专题 明细表插入数据时调用主表对应的数据) 最近,在论坛中,遇到了不少比较难的sql问题,虽然自己都能解决,但发现过几天后,就记不起来了,也忘记解决 ...
- 在论坛中出现的比较难的sql问题:42(动态行转列 考勤时间动态列)
原文:在论坛中出现的比较难的sql问题:42(动态行转列 考勤时间动态列) 所以,觉得有必要记录下来,这样以后再次碰到这类问题,也能从中获取解答的思路.
- 在论坛中出现的比较难的sql问题:41(循环替换 循环替换关键字)
原文:在论坛中出现的比较难的sql问题:41(循环替换 循环替换关键字) 所以,觉得有必要记录下来,这样以后再次碰到这类问题,也能从中获取解答的思路.
- 在论坛中出现的比较难的sql问题:40(子查询 销售和历史库存)
原文:在论坛中出现的比较难的sql问题:40(子查询 销售和历史库存) 最近,在论坛中,遇到了不少比较难的sql问题,虽然自己都能解决,但发现过几天后,就记不起来了,也忘记解决的方法了. 所以,觉得有 ...
- 在论坛中出现的比较难的sql问题:39(动态行转列 动态日期列问题)
原文:在论坛中出现的比较难的sql问题:39(动态行转列 动态日期列问题) 最近,在论坛中,遇到了不少比较难的sql问题,虽然自己都能解决,但发现过几天后,就记不起来了,也忘记解决的方法了. 所以,觉 ...
- 在论坛中出现的比较难的sql问题:38(字符拆分 字符串检索问题)
原文:在论坛中出现的比较难的sql问题:38(字符拆分 字符串检索问题) 最近,在论坛中,遇到了不少比较难的sql问题,虽然自己都能解决,但发现过几天后,就记不起来了,也忘记解决的方法了. 所以,觉得 ...
随机推荐
- ArcGIS10.3_解决属性表中文乱码问题
借鉴前辈们解决ArcMap低版本属性表乱码的问题解决方法,勇敢的尝试了一下Pro中的解决方法,其实道理都一样.先来看看第一种方法:打开CMD,如果是ArcMap,输入如下命令: reg add HKE ...
- Wamp 升级php7.3报错
电脑系统:win10 Wamp版本: WampServer Version 3.0.4 32bit Apache 2.4.18 - PHP 7.3.7 - MySQL 5.7.11 PHP 5.6.1 ...
- Spring StopWatch源码
import java.text.NumberFormat; import java.util.LinkedList; import java.util.List; public class Stop ...
- OpenJudge计算概论-最高的分数
/*======================================================== 最高的分数 总时间限制: 1000ms 内存限制: 65536kB 描述 孙老师 ...
- insmod某个内核模块时提示“Failed to find the folder holding the modules”如何处理?
答: 创建/lib/modules/$(uname -r)目录,命令如下: mkdir /lib/modules/$(uname -r)
- SpringMVC源码分析--HandlerMappings
之前分析过SpringMVC中的DispatcherServlet,分析了SpringMVC处理请求的过程.但忽略了一些DispatcherServlet协助请求处理的组件,例如SpringMVC中的 ...
- spring boot配置文件、日志配置和代码的多环境配置
一般项目都逃不掉开发.测试和生产这三套环境,如果每次给这三套环境打包都去改配置,累死不说,还一不留心就出差错.倒不如每套环境各给一套配置来的轻松.上代码: 1.通用配置放在application.pr ...
- 123457123456#0#-----com.twoapp.ErTongHuaHua01--前拼后广--儿童绘画填色游戏jiemei
com.twoapp.ErTongHuaHua01----儿童绘画填色游戏jiemei
- WPF引入OCX控件
(方法一) https://www.cnblogs.com/guaniu/archive/2013/04/07/3006445.html (方法二) 1.先注册OCX控件:(有的把OCX 控件封装到E ...
- swift 屏幕的翻转 + 状态栏(statusBar)的隐藏
1.状态栏的隐藏 这个问题是基于 UIApplication.shared.isStatusBarHidden = true; 调用居然是无效的…… 现在写下自己的代码,用来备忘吧…… 1.首先需要复 ...
