|
@@ -0,0 +1,78 @@
|
|
|
+SET ":user" = COALESCE(:user, $user, '');
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+SET ":date" = COALESCE(:date, $date, CURRENT_TIMESTAMP);
|
|
|
+SET ":date" = (SELECT datetime(datetime(:date, 'localtime'), 'start of day'));
|
|
|
+
|
|
|
+SELECT 'chart' AS component
|
|
|
+, '' AS title
|
|
|
+, TRUE AS time
|
|
|
+, 'area' AS type
|
|
|
+, 1 AS ymax
|
|
|
+, 0 AS ymin
|
|
|
+, 1 AS ystep
|
|
|
+, '100' AS height
|
|
|
+;
|
|
|
+
|
|
|
+
|
|
|
+SELECT datetime(CASE y
|
|
|
+ WHEN 0 THEN datetime(x, '-00:00:01.000')
|
|
|
+ WHEN 2 THEN datetime(x, '+00:00:01.000')
|
|
|
+ ELSE x
|
|
|
+END, 'localtime') AS x, series, CASE y % 2 WHEN 1 THEN 1 ELSE NULL END AS y FROM (
|
|
|
+SELECT ts AS x
|
|
|
+, activity AS series
|
|
|
+, 0 AS y
|
|
|
+FROM activities a
|
|
|
+WHERE user = :user
|
|
|
+AND datetime(datetime(ts, 'localtime'), 'start of day') = :date
|
|
|
+AND EXISTS (SELECT * FROM (
|
|
|
+ SELECT lag.activity
|
|
|
+ FROM activities lag
|
|
|
+ WHERE lag.ts < a.ts
|
|
|
+ ORDER BY ts ASC
|
|
|
+ LIMIT 1
|
|
|
+) q WHERE q.activity <> activity)
|
|
|
+UNION
|
|
|
+SELECT ts AS x
|
|
|
+, activity AS series
|
|
|
+, 1 AS y
|
|
|
+FROM activities a
|
|
|
+WHERE user = :user
|
|
|
+AND datetime(datetime(ts, 'localtime'), 'start of day') = :date
|
|
|
+UNION
|
|
|
+SELECT COALESCE((
|
|
|
+ SELECT lag.ts
|
|
|
+ FROM activities lag
|
|
|
+ WHERE lag.ts > a.ts AND lag.activity <> a.activity
|
|
|
+ AND datetime(datetime(lag.ts, 'localtime'), 'start of day') = :date
|
|
|
+ ORDER BY ts ASC
|
|
|
+ LIMIT 1
|
|
|
+), CURRENT_TIMESTAMP) AS x
|
|
|
+, activity AS series
|
|
|
+, 1 AS y
|
|
|
+FROM activities a
|
|
|
+WHERE user = :user
|
|
|
+AND datetime(datetime(ts, 'localtime'), 'start of day') = :date
|
|
|
+UNION
|
|
|
+SELECT COALESCE((
|
|
|
+ SELECT lag.ts
|
|
|
+ FROM activities lag
|
|
|
+ WHERE lag.ts > a.ts AND lag.activity <> a.activity
|
|
|
+ AND datetime(datetime(lag.ts, 'localtime'), 'start of day') = :date
|
|
|
+ ORDER BY ts ASC
|
|
|
+ LIMIT 1
|
|
|
+), CURRENT_TIMESTAMP) AS x
|
|
|
+, activity AS series
|
|
|
+, 2 AS y
|
|
|
+FROM activities a
|
|
|
+WHERE user = :user
|
|
|
+AND datetime(datetime(ts, 'localtime'), 'start of day') = :date
|
|
|
+) q
|
|
|
+ORDER BY x ASC, y ASC
|
|
|
+;
|