在日期之间查找 [英] Find in between dates
问题描述
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屋!