每组最近的比赛?

时间:2015-09-22 22:18:41

标签: sql sql-server

我的表格与此类似:

SELECT avg(CalibrationValueY), MotorType, Motor FROM MotorTable
WHERE CalibrationValueX = 1.23333
GROUP BY MotorType

在我的SQL查询中,我试图找到CalibrationValueY的平均值,其中CalibrationValueX是一个特定值:

SELECT TOP 1 CalibrationValueY, FileSize, MotorType, Motor FROM MotorTable
where FileType = 'text' order by abs(FileSize - 1.23333)

这不会返回任何内容,因为没有CalibrationValueX值恰好等于1.23333。

我能够为每个MotorTable单独找到最接近的匹配:

A     Car       1.2343            2.33343
B     Boat      1.2455            2.55434
但是,我不能让它与group by语句一起工作。 我怎么能这样做,如果我按MotorType分组,我正在搜索CalibrationValueX = 1.23333,我会得到这个:

left,right,top,bottom

1 个答案:

答案 0 :(得分:2)

使用ROW_NUMBERPARTITION BY您为每个组合TOP 1

<强> SQL Fiddle Demo

with cte as (
    SELECT MotorType, CalibrationValueX, CalibrationValueY,
        ROW_NUMBER() over (partition by MotorType order by abs(CalibrationValueX - 1.23333)) rn
    from historyCR
)
SELECT *
from cte
where rn = 1

输出

| MotorType | CalibrationValueX | CalibrationValueY | rn |
|-----------|-------------------|-------------------|----|
|      Boat |            1.2455 |           2.55434 |  1 |
|       Car |            1.2343 |           2.33343 |  1 |