现有一堆条码,其中尾数a/b表示一张制品的左右
问题是在录入过程中左右录入反了,即ID 1的SHT实际对应ID 2的PCS,以此类推
区分的思路是想利用EnterTime字段,因为经过排序后可以发现同制品a、b的录入时间间隔
非常接近,那么什么语句可以限定以1秒内,2秒内的时间间隔来分组查询这些条码呢?
简单语句尝试不出来,百度也基本只有大于多少小于多少时间这种方式
现有一堆条码,其中尾数a/b表示一张制品的左右
问题是在录入过程中左右录入反了,即ID 1的SHT实际对应ID 2的PCS,以此类推
区分的思路是想利用EnterTime字段,因为经过排序后可以发现同制品a、b的录入时间间隔
非常接近,那么什么语句可以限定以1秒内,2秒内的时间间隔来分组查询这些条码呢?
简单语句尝试不出来,百度也基本只有大于多少小于多少时间这种方式
你可以使用以下语句来实现你的需求:
SELECT * FROM table
WHERE ABS(EnterTime - LAG(EnterTime, 1) OVER (PARTITION BY a ORDER BY EnterTime)) <= INTERVAL '2' SECOND
AND ABS(EnterTime - LAG(EnterTime, 1) OVER (PARTITION BY b ORDER BY EnterTime)) <= INTERVAL '2' SECOND
在上面的语句中,我们使用了 LAG 函数来查询每个制品的上一条记录的录入时间,并使用 ABS 函数求绝对值,然后使用 INTERVAL 函数指定时间间隔,最后使用 WHERE 子句来筛选出时间间隔在 1 秒内或 2 秒内的记录。
你也可以使用 BETWEEN 子句来筛选出时间间隔在 1 秒内或 2 秒内的记录:
SELECT * FROM table
WHERE EnterTime BETWEEN LAG(EnterTime, 1) OVER (PARTITION BY a ORDER BY EnterTime) AND LAG(EnterTime, 1) OVER (PARTITION BY a ORDER BY EnterTime) + INTERVAL '2' SECOND
AND EnterTime BETWEEN LAG(EnterTime, 1) OVER (PARTITION BY b ORDER BY EnterTime) AND LAG(EnterTime, 1) OVER (PARTITION BY b ORDER BY EnterTime) + INTERVAL '2' SECOND