|
@@ -35,25 +35,17 @@ SELECT 'chart' AS component
|
|
|
, '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
|
|
|
- );
|
|
|
+SET ":any" = 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, 'Unknown' AS series WHERE :any;
|
|
|
+SELECT NULL AS x, NULL AS y, 'Eating' AS series WHERE :any;
|
|
|
+SELECT NULL AS x, NULL AS y, 'Not eating' AS series WHERE :any;
|
|
|
+SET ":morning_offset" = '08:00:00.000';
|
|
|
+SET ":evening_offset" = '03:00:00.000';
|
|
|
WITH plot AS (
|
|
|
SELECT ROW_NUMBER() OVER (ORDER BY ts) AS row
|
|
|
, ts
|
|
@@ -66,11 +58,7 @@ WITH plot AS (
|
|
|
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
|
|
|
- )
|
|
|
+ AND :any
|
|
|
ORDER BY ts DESC
|
|
|
LIMIT 1
|
|
|
)
|
|
@@ -78,54 +66,28 @@ WITH plot AS (
|
|
|
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
|
|
|
- )
|
|
|
+ AND :any
|
|
|
ORDER BY ts DESC
|
|
|
LIMIT 1
|
|
|
)
|
|
|
)
|
|
|
)
|
|
|
-SELECT datetime(:start_of_day, '+06:00:00.000') AS x, 1 AS y, (
|
|
|
+SELECT datetime(:start_of_day, '+'||:morning_offset) 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
|
|
|
- )
|
|
|
+ WHERE user = :user AND datetime(ts, 'localtime') <= datetime(:start_of_day, '+'||:morning_offset)
|
|
|
+ AND :any
|
|
|
ORDER BY ts DESC
|
|
|
LIMIT 1
|
|
|
) AS series
|
|
|
UNION
|
|
|
-SELECT datetime(:end_of_day, '-02:00:00.000') AS x, 1 AS y, (
|
|
|
+SELECT datetime(:end_of_day, '-'||:evening_offset) 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
|
|
|
- )
|
|
|
+ WHERE user = :user AND datetime(ts, 'localtime') <= datetime(:end_of_day, '-'||:evening_offset)
|
|
|
+ AND :any
|
|
|
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
|
|
@@ -146,21 +108,7 @@ SELECT datetime(x, 'localtime') AS x, CASE value WHEN 0 THEN NULL ELSE value END
|
|
|
AND plot.activity <> next.activity
|
|
|
) q
|
|
|
WHERE
|
|
|
- datetime(datetime(x, 'localtime'), '-06:00:00.000') >= :start_of_day
|
|
|
+ datetime(datetime(x, 'localtime'), '-'||:morning_offset) >= :start_of_day
|
|
|
AND
|
|
|
- datetime(datetime(x, 'localtime'), '+02:00:00.000') <= :end_of_day
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
+ datetime(datetime(x, 'localtime'), '+'||:evening_offset) <= :end_of_day
|
|
|
;
|