我很珍惜地问如何找到最接近的匹配,但是后来我意识到sql-server ROW_NUMBERPARTITION 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/

10-12 20:14