从现在起一年后的日期,检查该日期的下一个期限

时间:2013-09-04 17:13:22

标签: sql sql-server-2008 tsql

我的这个表包含 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中计算的日期之后落后的第一个术语

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。