我的表格与此类似:
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
答案 0 :(得分:2)
使用ROW_NUMBER
和PARTITION 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 |