在日期之间查找 [英] Find in between dates

查看:81
本文介绍了在日期之间查找的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述


create
table #student_test studentid
int
test_date
datetime

create table #student_test(studentid int, test_date datetime)


插入
into #student_test


1
'1/1/2018 ' ),


<跨度>&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;
1
'2/1/2018 ' ),


<跨度>&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;
1
'3/1/2018 ' ),


<跨度>&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;
1
'11/1/2018 ' ),


<跨度>&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;
1
'12/15/2018 ' ),


                   
1
'1/1/2019 ' ),


                   
1
'2/1/2019 ' ),


                   
1
'3/1/2019 ' ),


                   
1
'5/1/2019 ' ),


<跨度>&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;
2
'1/15/2019 ' ),


                   
2
'2/15/2019 '



这存储在另一个表#student_test_year中,它具有第一次测试并且在特定年份最后一次测试。


在接下来的一年中,最后一次测试成为第一次测试。例如2019年学生1,12/15/2018成为第一次测试。



创建
#student_test_year studentid
int
year
int
first_test
日期时间
last_test
datetime

create table #student_test_year(studentid int, year int, first_test datetime, last_test datetime)


插入
into #student_test_year
1
2018

'1/1/2018'
'12/15/2018' ),

insert into #student_test_year values(1, 2018, '1/1/2018', '12/15/2018'),


<跨度>&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP; &NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;    
   1
2019

'12/15/2018'
'5/1/2019' ),

                                                     (1, 2019, '12/15/2018', '5/1/2019'),

<跨度>&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP; &NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;    
   2
2019

'1/15/2019'
'2/15/2018'

                                                     (2, 2019, '1/15/2019', '2/15/2018')

试图找到所有中间测试,其测试日期>第一个日期和<最后测试日期。

学生ID <跨度>&NBSP;&NBSP;&NBSP;&NBSP;
第一测试<跨度>&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP ; 
中间测试

Student id     first test        in-between test

1 <跨度>&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP ;
1/1/2018       2/1/2018

1                  1/1/2018      2/1/2018

1 <跨度>&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP ;
1/1/2018       3/1/2018

1                  1/1/2018      3/1/2018

1 <跨度>&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP ;
1/1/2018       11/1/2018

1                  1/1/2018      11/1/2018

1 <跨度>&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP ;
12/15/2018    1/1/2019

1                  12/15/2018   1/1/2019

1 <跨度>&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP ;
12/15/2018    2/1/2019

1                  12/15/2018   2/1/2019

1 <跨度>&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP ;
12/15/2018    3/1/2019

1                  12/15/2018   3/1/2019

id为2的学生不应该在结果中,因为没有中间测试。

谢谢

推荐答案

此查询提供所需的输出:

This query gives desired output:

从#student_test st $ $ b中选择st.studentid,st.test_date,sty.year

$ b内连接#student_test_year sty on st.studentid = sty.studentid

其中st.test_date> sty.first_test和st.test_date< sty.last_test

select st.studentid, st.test_date, sty.year
from #student_test st
inner join #student_test_year sty on st.studentid = sty.studentid
where st.test_date > sty.first_test and st.test_date < sty.last_test

任何更有效的查询?

TIA


这篇关于在日期之间查找的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆