选择最接近给定值的两行

时间:2016-05-13 08:33:05

标签: sql ms-access access-vba access

我在 MS Access。

中有下表



Day    ABC
365     25
548     35
730     37 
913     58 
1095    146




我想查询它,以便在Day列的给定值之前和之后得到行。该值是可变的,例如可以是 value = 432 对于此示例,查询将生成下表。



Day    ABC
365     25
548     35




因为给定值= 432大于Day值365且小于Day值548.

我设法做的是获得一个领域,但不是两个领域。以下查询为我提供了Day字段的正确行。

    Select Max(Day) As Day From Table Where Day < 432
    UNION
    Select Min(Day) As Day  From Table Where Day > 432

当我使用此代码并添加另一个字段(如ABC)时,我收到错误。

  

您尝试执行不包含指定的查询   表达&#39; ABC&#39;作为集合函数的一部分。

你可以帮帮我吗?我认为这应该是一项非常容易的任务。谢谢!

2 个答案:

答案 0 :(得分:1)

您的SQL存在一些问题。出现错误消息是因为您没有向GROUP BY ABC语句添加SELECT子句 您还会获得MAX(DAY) as DAY的循环引用 - 您需要将as Day更改为其他内容as lDay。 你可能(我做的)得到一个错误语法错误调用它Table - 非常确定这是一个保留字。

也许这个查询会更好用:

Select Top 1 Day, ABC From Table3 Where Day <= 913 ORDER BY Day Desc
UNION ALL
Select Top 1 Day, ABC From Table3 Where Day >= 913 ORDER BY Day Asc

答案 1 :(得分:0)

你也可能是一个小小的爱好者:

Select Top 2 Day, ABC From Table3 Order By Abs(Day - 432) Desc

请注意,结果将与问题的标题相符,不一定是您的详细说明......