Files
dtm-py-all/sql检查数据连续.txt

121 lines
3.5 KiB
Plaintext
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

WITH RECURSIVE seq AS (
SELECT
SN,
MIN(itemCurrentCycles) AS current_cycle,
MAX(itemCurrentCycles) AS max_cycle
FROM TestReq
WHERE SN = '543009862' -- 加入 SN 条件
AND startTime > '2025-02-18 18:00:00' -- 加入 startTime 条件
GROUP BY SN
UNION ALL
SELECT
SN,
current_cycle + 1,
max_cycle
FROM seq
WHERE current_cycle < max_cycle
)
SELECT
s.SN,
s.current_cycle AS missing_cycle
FROM seq s
LEFT JOIN TestReq t
ON s.SN = t.SN
AND s.current_cycle = t.itemCurrentCycles
AND t.startTime > '2025-02-18 18:00:00' -- 在 JOIN 中加入 startTime 条件
WHERE t.itemCurrentCycles IS NULL
AND s.SN = '543009862'; -- 在最终结果中过滤 SN
获取指定SN的各个字段的最小值和最大值
SELECT
MIN(stationDropCycles) as min_stationDropCycles,
MAX(stationDropCycles) as max_stationDropCycles,
MIN(itemCurrentCycles) as min_itemCurrentCycles,
MAX(itemCurrentCycles) as max_itemCurrentCycles,
MIN(dropCycles) as min_dropCycles,
MAX(dropCycles) as max_dropCycles
FROM TestReq
WHERE SN = '指定SN值';
获取指定SN在特定时间范围内的各个字段的最小值和最大值
SELECT
MIN(stationDropCycles) as min_stationDropCycles,
MAX(stationDropCycles) as max_stationDropCycles,
MIN(itemCurrentCycles) as min_itemCurrentCycles,
MAX(itemCurrentCycles) as max_itemCurrentCycles,
MIN(dropCycles) as min_dropCycles,
MAX(dropCycles) as max_dropCycles
FROM TestReq
WHERE SN = '指定SN值'
AND startTime >= '2025-02-26 19:29:45'
AND endTime <= '2025-02-26 19:29:47';
检查 itemCurrentCycles stationDropCycles dropCycles 字段的连续性并找出缺失值
WITH RECURSIVE params AS (
SELECT
'202401032245180707' AS target_sn,
'2025-02-26 19:29:45' AS range_start,
'2026-02-26 19:29:47' AS range_end,
'itemCurrentCycles' AS cycle_field_name -- 可选的字段名dropCycles, itemCurrentCycles, stationDropCycles
),
min_max AS (
SELECT
MIN(
CASE params.cycle_field_name
WHEN 'dropCycles' THEN TestReq.dropCycles
WHEN 'itemCurrentCycles' THEN TestReq.itemCurrentCycles
WHEN 'stationDropCycles' THEN TestReq.stationDropCycles
ELSE NULL
END
) AS min_cycle,
MAX(
CASE params.cycle_field_name
WHEN 'dropCycles' THEN TestReq.dropCycles
WHEN 'itemCurrentCycles' THEN TestReq.itemCurrentCycles
WHEN 'stationDropCycles' THEN TestReq.stationDropCycles
ELSE NULL
END
) AS max_cycle
FROM TestReq, params
WHERE SN = params.target_sn
AND startTime >= params.range_start
AND endTime <= params.range_end
),
numbers(n) AS (
SELECT min_cycle FROM min_max
UNION ALL
SELECT n + 1 FROM numbers, min_max
WHERE n < min_max.max_cycle
)
SELECT
n AS missing_value,
(SELECT min_cycle FROM min_max) AS min_cycle,
(SELECT max_cycle FROM min_max) AS max_cycle,
(SELECT cycle_field_name FROM params) AS field_name
FROM numbers
WHERE n NOT IN (
SELECT
CASE params.cycle_field_name
WHEN 'dropCycles' THEN TestReq.dropCycles
WHEN 'itemCurrentCycles' THEN TestReq.itemCurrentCycles
WHEN 'stationDropCycles' THEN TestReq.stationDropCycles
ELSE NULL
END
FROM TestReq, params
WHERE SN = params.target_sn
AND startTime >= params.range_start
AND endTime <= params.range_end
)
ORDER BY n;
)
ORDER BY n;