A
Size: a a a
A
B
const id = 5; // take it from datapoints
const start = new Date(2020, 03, 01).getTime(); // 2020.04.01
const end = new Date(2020, 04, 00).getTime(); // 2020.04.30
// Take first real value after start
const subQueryStart = "SELECT ts, val FROM `iobroker`.ts_number WHERE id=" + id + " AND ts>=" + start + " AND ts<" + end + " AND val IS NOT NULL ORDER BY ts ASC LIMIT 1";
// Take last real value before end
const subQueryEnd = "SELECT ts, val FROM `iobroker`.ts_number WHERE id=" + id + " AND ts>=" + start + " AND ts<" + end + " AND val IS NOT NULL ORDER BY ts DESC LIMIT 1";
// Take last value before start
const subQueryFirst = "SELECT ts, val FROM `iobroker`.ts_number WHERE id=" + id + " AND ts< " + start + " ORDER BY ts DESC LIMIT 1";
// Take next value after end
const subQueryLast = "SELECT ts, val FROM `iobroker`.ts_number WHERE id=" + id + " AND ts>= " + end + " ORDER BY ts ASC LIMIT 1";
// get values from counters where counter changed from up to down (e.g. counter changed)
const subQueryCounterChanges = "SELECT ts, val FROM `iobroker`.ts_counter WHERE id=" + id + " AND ts>" + start + " AND ts<" + end + " AND val IS NOT NULL ORDER BY ts ASC";
const query = "SELECT DISTINCT(a.ts), a.val from ((" + subQueryFirst + ")\n" +
"UNION ALL \n(" + subQueryStart + ")\n" +
"UNION ALL \n(" + subQueryEnd + ")\n" +
"UNION ALL \n(" + subQueryLast + ")\n" +
"UNION ALL \n(" + subQueryCounterChanges + ")\n" +
"ORDER BY ts) a;";
Юa
B
D
a
Юa

a
a
Юa
a
a
Юa
a
Юa
a
Юa
a
Юa
Юa