是否可以从输入到表中的最后一行返回字段的一部分

时间:2014-02-17 10:15:00

标签: sql sql-server-2012

我建议有一个表(设计还没有确定,可以根据回答这个问题所表达的观点而改变),这个表有一个int类型的主键(使用自动增量)和一个字段(类型为Nchar的ReturnPeriod),其中包含'06 2013'形式的数据(在本例中代表2013年6月)。

我只想返回06或者在表格中输入的最后一条记录中发生的任何事情。这个表每年不会超过4个记录(所以它永远不会那么大)。它还有一列指示最后一个条目的创建日期。

我觉得这个列至少是最适合获取最后一条记录的候选者,所以基本上我想知道sql是否有一个内置函数来比较查询运行的日期到最近的匹配一列,并返回一个字段的前两个字符。

到目前为止,我有:

Select Mid(ReturnPeriod,1,2) from Returns
Where DateReturnEntered = <and this is where I'm stuck>

我正在寻找的是一个where子句,它将使用运行查询的日期作为其参考点来获取最后输入的记录(Date类型的DateRetunEntered包含输入记录的日期)。

当然,可能有一种更简单的方法来保证一个人拥有最后一条记录,在这种情况下,我愿意接受建议。

由于

2 个答案:

答案 0 :(得分:0)

我会将您的ReturnPeriod存储为date数据类型,使用该月的名义上的第1个,例如2013年6月1日,如果您没有实际日期。

这将允许与您输入的日期进行直接比较,如果需要,可以使用返回值的简单格式。

您的查询将在您输入日期之前找到最新日期。

SELECT MONTH(MAX(ReturnPeriod)) AS ReturnMonth
FROM Returns
WHERE ReturnPeriod <= @DateReturnEntered

答案 1 :(得分:0)

我认为您应该将ReturnPeriod作为日期时间存储,例如不是06 2013作为VARCHAR而是01.06.2013作为DATETIME(2013年6月1日的第一天)。

在这种情况下,如果我的问题正确,您可以使用GETDATE()获取当前时间:

SELECT TOP 1 MONTH(ReturnPeriod) 
 FROM Returns 
 WHERE DateReturnEntered<=GETDATE()
 ORDER BY DateReturnEntered DESC

如果您将ReturnPeriod存储为varchar,那么

SELECT TOP 1 LEFT(ReturnPeriod,2)
 FROM Returns 
 WHERE DateReturnEntered<=GETDATE()
 ORDER BY DateReturnEntered DESC