add batch remove batch split batch comment selection show hidden batches hide batch highlight batch
db<>fiddle
donate feedback about
By using db<>fiddle, you agree to license everything you submit by Creative Commons CC0.
CREATE TABLE `scantech_data` (
`scdate` varchar(20),
`value1` float,
`value2` float
);

INSERT INTO `scantech_data` VALUES ('2021-11-10 17:00:00',1943.98,2943.98);
INSERT INTO `scantech_data` VALUES ('2021-11-10 17:00:18',1957.13,2957.13);
INSERT INTO `scantech_data` VALUES ('2021-11-10 17:00:36',1953.94,2953.94);
INSERT INTO `scantech_data` VALUES ('2021-11-10 17:00:54',1946.28,2946.28);
INSERT INTO `scantech_data` VALUES ('2021-11-10 17:01:12',1960.29,2960.29);
INSERT INTO `scantech_data` VALUES ('2021-11-10 17:01:29',1950.39,2950.39);
INSERT INTO `scantech_data` VALUES ('2021-11-10 17:01:47',1942.62,2942.62);
INSERT INTO `scantech_data` VALUES ('2021-11-10 17:02:05',1954.64,2954.64);
INSERT INTO `scantech_data` VALUES ('2021-11-10 17:02:23',1958.21,2958.21);
INSERT INTO `scantech_data` VALUES ('2021-11-10 17:02:41',1950.26,2950.26);
INSERT INTO `scantech_data` VALUES ('2021-11-10 17:02:58',1945.33,2945.33);
INSERT INTO `scantech_data` VALUES ('2021-11-10 17:03:16',1960.35,2960.35);
-- 額外加入
INSERT INTO `scantech_data` VALUES ('2021-11-10 17:04:33',NULL,NULL);

SELECT *
FROM scantech_data
ORDER BY scdate
scdate value1 value2
2021-11-10 17:00:00 1943.98 2943.98
2021-11-10 17:00:18 1957.13 2957.13
2021-11-10 17:00:36 1953.94 2953.94
2021-11-10 17:00:54 1946.28 2946.28
2021-11-10 17:01:12 1960.29 2960.29
2021-11-10 17:01:29 1950.39 2950.39
2021-11-10 17:01:47 1942.62 2942.62
2021-11-10 17:02:05 1954.64 2954.64
2021-11-10 17:02:23 1958.21 2958.21
2021-11-10 17:02:41 1950.26 2950.26
2021-11-10 17:02:58 1945.33 2945.33
2021-11-10 17:03:16 1960.35 2960.35
2021-11-10 17:04:33 null null
SELECT T1.scdate,
--
T1.value1,
CASE WHEN IFNULL(T1.value1,0)+IFNULL(T2.value1,0)+IFNULL(T3.value1,0) > 0 THEN
ROUND((IFNULL(T1.value1,0)+IFNULL(T2.value1,0)+IFNULL(T3.value1,0))/(
CASE WHEN T1.value1 IS NULL THEN 0 ELSE 1 END +
CASE WHEN T2.value1 IS NULL THEN 0 ELSE 1 END +
CASE WHEN T3.value1 IS NULL THEN 0 ELSE 1 END),2)
ELSE NULL END AS avg_v1,
-- Copy 上面的 value1
T1.value2,
CASE WHEN IFNULL(T1.value2,0)+IFNULL(T2.value2,0)+IFNULL(T3.value2,0) > 0 THEN
ROUND((IFNULL(T1.value2,0)+IFNULL(T2.value2,0)+IFNULL(T3.value2,0))/(
CASE WHEN T1.value2 IS NULL THEN 0 ELSE 1 END +
CASE WHEN T2.value2 IS NULL THEN 0 ELSE 1 END +
CASE WHEN T3.value2 IS NULL THEN 0 ELSE 1 END),2)
ELSE NULL END AS avg_v2
--
FROM (
SELECT *,(@rownum_A := @rownum_A + 1) AS rownum_A FROM (SELECT @rownum_A := 0) r,scantech_data t
ORDER BY scdate asc) AS T1
LEFT JOIN (
SELECT *,(@rownum_B := @rownum_B + 1) AS rownum_B FROM (SELECT @rownum_B := 0) r,scantech_data t
ORDER BY scdate asc) AS T2 ON T2.rownum_B = T1.rownum_A + 1
LEFT JOIN (
SELECT *,(@rownum_C := @rownum_C + 1) AS rownum_C FROM (SELECT @rownum_C := 0) r,scantech_data t
ORDER BY scdate asc) AS T3 ON T3.rownum_C = T1.rownum_A + 2
ORDER BY T1.scdate
scdate value1 avg_v1 value2 avg_v2
2021-11-10 17:00:00 1943.98 1951.68 2943.98 2951.68
2021-11-10 17:00:18 1957.13 1952.45 2957.13 2952.45
2021-11-10 17:00:36 1953.94 1953.50 2953.94 2953.50
2021-11-10 17:00:54 1946.28 1952.32 2946.28 2952.32
2021-11-10 17:01:12 1960.29 1951.10 2960.29 2951.10
2021-11-10 17:01:29 1950.39 1949.22 2950.39 2949.22
2021-11-10 17:01:47 1942.62 1951.82 2942.62 2951.82
2021-11-10 17:02:05 1954.64 1954.37 2954.64 2954.37
2021-11-10 17:02:23 1958.21 1951.27 2958.21 2951.27
2021-11-10 17:02:41 1950.26 1951.98 2950.26 2951.98
2021-11-10 17:02:58 1945.33 1952.84 2945.33 2952.84
2021-11-10 17:03:16 1960.35 1960.35 2960.35 2960.35
2021-11-10 17:04:33 null null null null