我有一个看起来像这样的架构:

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

以及如下所示的数据:

我正在处理执行以下操作的查询,但不太知道进行的最佳方法:
  • 如果 Where 子句包含“5/1/2013 10:34:09”的 ReadTime,它将返回突出显示的记录,因为它是完全匹配的。
  • 如果 Where 子句包含 ReadTime '5/1/2013 10:34:11',它将返回突出显示的记录,因为这是最近的匹配项。
  • 如果 Where 子句包含“5/1/2013 10:34:14”的 ReadTime,它将返回包含“5/1/2013 10:34:16”的记录,因为这是最接近的匹配。

  • 我正在使用 SQL Server 2012 并且可以使用 2012 特定查询。

    最佳答案

    像这样的东西:

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

    应该能够适应您的需求

    关于sql - 如何找到最近的日期?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16320312/

    10-14 00:22