我很珍惜地问如何找到最接近的匹配,但是后来我意识到sql-server ROW_NUMBER
和PARTITION BY
不在sql脚本的sqlite3中实现。
这是我想做的事情:
我有看起来像这样的表:
Motor MotorType CalibrationValueX CalibrationValueY
A Car 1.2343 2.33343
B Boat 1.2455 2.55434
B1 Boat 1.4554 2.11211
C Car 1.4323 4.56555
D Car 1.533 4.6666
..... 500 entries
在我的SQL查询中,我试图找到CalibrationValueY的平均值,其中CalibrationValueX是某个值:
SELECT avg(CalibrationValueY), MotorType, Motor FROM MotorTable
WHERE CalibrationValueX = 1.23333
GROUP BY MotorType
这将不会返回任何内容,因为不存在完全等于1.23333的CalibrationValueX值。
我能够分别为每个MotorTable找到最接近的匹配项:
SELECT CalibrationValueY, FileSize, MotorType, Motor FROM MotorTable
where FileType = 'text' order by abs(FileSize - 1.23333) LIMIT 1
但是,我不能让它与group by语句一起使用。
我该怎么做,如果我按MotorType分组并且正在搜索CalibrationValueX = 1.23333,我将得到以下信息:
A Car 1.2343 2.33343
B Boat 1.2455 2.55434
我意识到,使用row_count和partition by的解决方案在sqlite3中不起作用。
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执行工作代码X类型...类似
SELECT DISTINCT MotorType FROM MotorTable
并循环运行其他查询。但是,我担心速度。 最佳答案
获取所有电机类型:
SELECT DISTINCT MotorType
FROM MotorTable;
对于每种电动机类型,获取具有最接近的校准值的电动机:
SELECT MotorType,
(SELECT Motor
FROM MotorTable AS T2
WHERE T2.MotorType = Types.MotorType
ORDER BY abs(CalibrationValueX - 1.2345)
LIMIT 1
) AS Motor
FROM (SELECT DISTINCT MotorType
FROM MotorTable) AS Types;
使用以下值过滤原始表:
SELECT Motor,
MotorType,
CalibrationValueX,
CalibrationValueY
FROM MotorTable
JOIN (SELECT MotorType,
(SELECT Motor
FROM MotorTable AS T2
WHERE T2.MotorType = Types.MotorType
ORDER BY abs(CalibrationValueX - 1.2345)
LIMIT 1
) AS Motor
FROM (SELECT DISTINCT MotorType
FROM MotorTable) AS Types)
USING (MotorType, Motor);
关于python - 每组与python中的sqlite3最接近的匹配吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32740656/