2013-05-01 80 views
4

我有一个模式,看起来是这样的:如何找到最近的日期?

CREATE TABLE [dbo].[CdCl](
    [Id] [int] NOT NULL, 
    [SubId] [varchar](15) NULL, 
    [ReadTime] [datetime] NOT NULL, 
    [ActualPower] [real] NOT NULL 
) 

和数据如下所示:

enter image description here

我的工作,做以下的查询,但不要”吨相当知道最好的方式进行:

  1. 如果Where子句包含ReadTime'5/1/2013 10:34:09',它会返回突出显示的记录,因为它完全匹配。

  2. 如果Where子句包含ReadTime'5/1/2013 10:34:11',它将返回突出显示的记录,因为这是最接近的匹配项。

  3. 如果Where子句包含ReadTime为'5/1/2013 10:34:14',它将返回包含'5/1/2013 10:34:16'的记录,因为这是最接近的匹配。

我正在使用SQL Server 2012,并将与2012年具体查询罚款。

+0

可能重复:http://stackoverflow.com/questions/4649665/t-sql-select-by-最近的日期和分组的ID?rq = 1 – 2013-05-01 14:50:57

回答

8

事情是这样的:

select top 1 * 
from CdCl 
order by abs(datediff(ms, ReadTime, <yourdatetime>)) 

应该可以说,以适应您的需求

+0

爱得简单优雅的答案。 – 2013-05-01 15:21:14