我的这个表包含 Term 和 TermStartDate 和 TermEndDate 。我必须考虑今天日期,然后检查属于(当前期限)的期限,然后从当前期限的TermEndDate(Calculated_Date)开始360天考虑一个日期。
一旦我得到该日期,我必须检查该日期之后的哪个Term Falls。基本上,在Calculated_Date之后的TermStartdate是什么。
注意:
基本上,我需要学生的当前学期和当前学期前一年的所有记录。例如,如果这个术语是2013年秋季,我需要从2013年春季开始的记录。不应该考虑2012年秋季。
修改
样本表
Term TermStartDate TermEndDate
Fall 2012 2012/08/27 2012/12/15
Spring 2013 2013/01/14 2013/04/26
Sumr I 2013 2013/05/06 2013/06/29
Sumr II 2013 2013/07/01 2013/08/24
Fall 2013 2013/08/26 2013/12/14
Spring 2014 2014/01/13 2014/04/26
第1步:GetDate()
步骤2:检查GetDate()之后的TermEndDate(给出当前术语)
步骤3:在当前期限结束日期前360天准确计算日期
步骤4:在步骤3中计算的日期之后落后的第一个术语
答案 0 :(得分:2)
DECLARE @lastTermEnd
SELECT @lastTermEnd=DATEADD(d,-360,TermEndDate)
FROM Students
where GETDATE() between TermStartDate and TermEndDate
SELECT TOP 1 *
from Students
WHERE TermStartDate between @lastTermEnd and GETDATE()
ORDER BY TermStartDate
这将列出计算日期之后的第一个术语。
更新:
DECLARE @lastTermEnd datetime
DECLARE @TermEnd datetime
SELECT @TermEnd=TermEndDate
FROM Students
where GETDATE() between TermStartDate and TermEndDate
SET @lastTermEnd=DATEADD(d,-360,@TermEnd)
SELECT TOP 1 TermStartDate,@TermEnd
from Students
WHERE TermStartDate between @lastTermEnd and GETDATE()
ORDER BY TermStartDate
答案 1 :(得分:1)
所以我认为这就是你所要求的,但实际上我并不完全确定。你的问题很难理解。
SELECT *
FROM myStudents
WHERE theDate BETWEEN DATEADD(yy,-1,currentTerm) AND currentTerm
答案 2 :(得分:1)
我认为你的问题太复杂了,但正如你所要求的那样,试试这个:
DECLARE @terms TABLE(term varchar(50),termStartDate date, termEndDate date)
INSERT INTO @terms VALUES('Fall 2012','8/27/2012','12/15/2012')
INSERT INTO @terms VALUES('Spring 2013','1/14/2013','4/26/2013')
INSERT INTO @terms VALUES('Sumr I 2013','5/6/2013','6/29/2013')
INSERT INTO @terms VALUES('Sumr II 2013','7/1/2013','8/24/2013')
INSERT INTO @terms VALUES('Fall 2013','8/26/2013','12/14/2013')
INSERT INTO @terms VALUES('Spring 2014','1/13/2014','4/26/2014')
DECLARE @today date =GETDATE()
SELECT @today = termEndDate
FROM @terms
WHERE termStartDate<=@today AND termEndDate>=@today
SELECT term
FROM @terms
WHERE termStartDate>=DATEADD(d,-360,@today) AND termStartDate<=GETDATE()
这将列出当前期限结束前360天内包含的所有条款。
<强>更新强>
SELECT min(termStartDate)startDate FROM (
SELECT termStartDate
FROM @terms
GROUP BY termStartDate
HAVING termStartDate>=DATEADD(d,-360,@today)
AND termStartDate<=GETDATE()
)z
将获得最早的startDate。