|
@@ -32,13 +32,28 @@ SELECT 'chart' AS component
|
|
|
|
|
|
|
|
|
, 'azure' AS color
|
|
|
-, 'red' AS color
|
|
|
, 'green' AS color
|
|
|
+, 'red' AS color
|
|
|
;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
+SELECT NULL AS x, NULL AS y, 'Unknown' AS series
|
|
|
+ WHERE EXISTS (SELECT * FROM activities
|
|
|
+ WHERE user = :user
|
|
|
+ AND datetime(ts, 'localtime') BETWEEN :start_of_day AND :end_of_day
|
|
|
+ LIMIT 1
|
|
|
+ );
|
|
|
+SELECT NULL AS x, NULL AS y, 'Eating' AS series
|
|
|
+ WHERE EXISTS (SELECT * FROM activities
|
|
|
+ WHERE user = :user
|
|
|
+ AND datetime(ts, 'localtime') BETWEEN :start_of_day AND :end_of_day
|
|
|
+ LIMIT 1
|
|
|
+ );
|
|
|
+SELECT NULL AS x, NULL AS y, 'Not eating' AS series
|
|
|
+ WHERE EXISTS (SELECT * FROM activities
|
|
|
+ WHERE user = :user
|
|
|
+ AND datetime(ts, 'localtime') BETWEEN :start_of_day AND :end_of_day
|
|
|
+ LIMIT 1
|
|
|
+ );
|
|
|
WITH plot AS (
|
|
|
SELECT ROW_NUMBER() OVER (ORDER BY ts) AS row
|
|
|
, ts
|
|
@@ -48,11 +63,69 @@ WITH plot AS (
|
|
|
WHERE user = :user
|
|
|
AND datetime(ts, 'localtime') BETWEEN :start_of_day AND :end_of_day
|
|
|
UNION
|
|
|
- SELECT datetime(:start_of_day, 'utc'), 'Unknown'
|
|
|
+ SELECT datetime(:start_of_day, 'utc'), (
|
|
|
+ SELECT activity FROM activities
|
|
|
+ WHERE user = :user AND datetime(ts, 'localtime') <= :start_of_day
|
|
|
+ AND EXISTS (SELECT * FROM activities
|
|
|
+ WHERE user = :user
|
|
|
+ AND datetime(ts, 'localtime') BETWEEN :start_of_day AND :end_of_day
|
|
|
+ LIMIT 1
|
|
|
+ )
|
|
|
+ ORDER BY ts DESC
|
|
|
+ LIMIT 1
|
|
|
+ )
|
|
|
UNION
|
|
|
- SELECT datetime(:end_of_day, 'utc'), 'Unknown'
|
|
|
+ SELECT datetime(:end_of_day, 'utc'), (
|
|
|
+ SELECT activity FROM activities
|
|
|
+ WHERE user = :user AND datetime(ts, 'localtime') <= :end_of_day
|
|
|
+ AND EXISTS (SELECT * FROM activities
|
|
|
+ WHERE user = :user
|
|
|
+ AND datetime(ts, 'localtime') BETWEEN :start_of_day AND :end_of_day
|
|
|
+ LIMIT 1
|
|
|
+ )
|
|
|
+ ORDER BY ts DESC
|
|
|
+ LIMIT 1
|
|
|
+ )
|
|
|
)
|
|
|
)
|
|
|
+SELECT datetime(:start_of_day, '+06:00:00.000') AS x, 1 AS y, (
|
|
|
+ SELECT activity FROM activities
|
|
|
+ WHERE user = :user AND datetime(ts, 'localtime') <= datetime(:start_of_day, '+06:00:00.000')
|
|
|
+ AND EXISTS (SELECT * FROM activities
|
|
|
+ WHERE user = :user
|
|
|
+ AND datetime(ts, 'localtime') BETWEEN :start_of_day AND :end_of_day
|
|
|
+ LIMIT 1
|
|
|
+ )
|
|
|
+ ORDER BY ts DESC
|
|
|
+ LIMIT 1
|
|
|
+) AS series
|
|
|
+UNION
|
|
|
+SELECT datetime(:end_of_day, '-02:00:00.000') AS x, 1 AS y, (
|
|
|
+ SELECT activity FROM activities
|
|
|
+ WHERE user = :user AND datetime(ts, 'localtime') <= datetime(:end_of_day, '-02:00:00.000')
|
|
|
+ AND EXISTS (SELECT * FROM activities
|
|
|
+ WHERE user = :user
|
|
|
+ AND datetime(ts, 'localtime') BETWEEN :start_of_day AND :end_of_day
|
|
|
+ LIMIT 1
|
|
|
+ )
|
|
|
+ ORDER BY ts DESC
|
|
|
+ LIMIT 1
|
|
|
+) AS series
|
|
|
+UNION
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
SELECT datetime(x, 'localtime') AS x, CASE value WHEN 0 THEN NULL ELSE value END AS y, series FROM (
|
|
|
SELECT datetime(next.ts, '-00:00:01.000') AS x, 0 AS value, next.activity AS series
|
|
|
FROM plot, plot next
|
|
@@ -72,5 +145,22 @@ SELECT datetime(x, 'localtime') AS x, CASE value WHEN 0 THEN NULL ELSE value END
|
|
|
WHERE plot.row = next.row - 1
|
|
|
AND plot.activity <> next.activity
|
|
|
) q
|
|
|
-ORDER BY series DESC, x ASC
|
|
|
+WHERE
|
|
|
+ datetime(datetime(x, 'localtime'), '-06:00:00.000') >= :start_of_day
|
|
|
+AND
|
|
|
+ datetime(datetime(x, 'localtime'), '+02:00:00.000') <= :end_of_day
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
;
|