1

У меня есть база данных SQLite3, которая содержит данные, подобные следующим

time_index      Circuit         dateTimeRecorded                activepower
404503          GPOs            2018-05-30 00:03:50             224.57
404503          Grid            2018-05-30 00:03:50             4.34
404503          Shed            2018-05-30 00:03:50             24.86
404504          GPOs            2018-05-30 00:08:51             223.89
404504          Grid            2018-05-30 00:08:51             5.69
404504          Shed            2018-05-30 00:08:51             25.25
404505          GPOs            2018-05-30 00:13:52             247.23
404505          Grid            2018-05-30 00:13:52             3.81
404505          Shed            2018-05-30 00:13:52             24.43
404506          GPOs            2018-05-30 00:18:52             223.19
404506          Grid            2018-05-30 00:18:52             4.58
404506          Shed            2018-05-30 00:18:52             25.11
404507          GPOs            2018-05-30 00:23:52             222.57
404507          Grid            2018-05-30 00:23:52             4.01
404507          Shed            2018-05-30 00:23:52             24.86

Мне удалось получить график, но все 3 схемы объединяются в одну линию. Я думаю, мне нужно как-то фильтровать и строить 3 раза.

Проблема в том, что данные вертикальные, а не горизонтальные.

Я подумал о параметризации предложения where в SQL, но не мог понять, как это сделать с помощью командной строки sqlite3.

Я думаю, у меня может быть 3 отдельных файла SQL, но я нахожу это немного уродливым.

Прогресс до сих пор заключается в следующем ...

set xdata time
set timefmt "%Y-%m-%d %H:%M:%S"
show xrange
set format x "%H:00"
#set datafile separator "   "
#set key autotitle columnhead
#
# Currently plotting all 3 sensors, working on how to plot for each sensor.
#
plot '< sqlite3 /tmp/usb_database.db ".read PlotElectricityUsage.sql"'  \
    using 3:5 \
    with lines \
    title "Electricity Usage"

pause -1 "Hit return to continue"

Где файл SQL выглядит следующим образом

.header on
.separator "    "
SELECT "DATA"."time_index",
       Case   
          When EUI64 = '000D6F0005A5BE9D' then 'Grid'
          When EUI64 = '000D6F0005A5D77E' then 'GPOs'
          When EUI64 = '000D6F0005A5BCAE' then 'Shed'
          Else '????'
       End as "Circuit",
       datetime("DATA"."TimeStamp", 'unixepoch', 'localtime') as "dateTimeRecorded",
       "DATA"."activepower"
FROM "DATA" 
WHERE "DATA"."devicetype" = 15 
   AND "DATA"."voltage" > 0 
   AND "dateTimeRecorded" BETWEEN date('now', 'start of day') 
                                    AND date('now', 'start of day', '+1 day') 
   AND "dateTimeRecorded" > Datetime('2018-03-09 13:00:00')
 ORDER BY "Circuit",
      "DATA"."time_index" ASC
;

Будем очень благодарны любой помощи.

1 ответ1

0

Используйте awk:

plot '< awk ''$2=="GPOs"'' /tmp/usb_database.db' u 1:5 w lp

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .