|
@@ -1,25 +1,29 @@
|
|
|
SET ":user" = COALESCE(:user, $user, '');
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
SET ":date" = COALESCE(:date, $date, CURRENT_TIMESTAMP);
|
|
|
-SET ":date" = (SELECT datetime(datetime(:date, 'localtime'), 'start of day'));
|
|
|
+SET ":start_of_day" = (SELECT datetime(datetime(:date, 'localtime'), 'start of day'));
|
|
|
+SET ":end_of_day" = (SELECT datetime(:start_of_day, '+1 days'));
|
|
|
|
|
|
SELECT 'chart' AS component
|
|
|
-, '' AS title
|
|
|
+, '' AS title
|
|
|
, TRUE AS time
|
|
|
, 'area' AS type
|
|
|
, 1 AS ymax
|
|
|
, 0 AS ymin
|
|
|
, 1 AS ystep
|
|
|
, '100' AS height
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+, 'azure' AS color
|
|
|
+, 'green' AS color
|
|
|
+, 'red' AS color
|
|
|
;
|
|
|
|
|
|
|
|
|
+SELECT :start_of_day AS x, NULL as y, 'Unknown' AS series;
|
|
|
+
|
|
|
+
|
|
|
+SELECT :end_of_day AS x, NULL as y, 'Unknown' AS series;
|
|
|
SELECT datetime(CASE y
|
|
|
WHEN 0 THEN datetime(x, '-00:00:01.000')
|
|
|
WHEN 2 THEN datetime(x, '+00:00:01.000')
|
|
@@ -30,49 +34,49 @@ SELECT ts AS x
|
|
|
, 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)
|
|
|
+AND datetime(datetime(ts, 'localtime'), 'start of day') = :start_of_day
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
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
|
|
|
+AND datetime(datetime(ts, 'localtime'), 'start of day') = :start_of_day
|
|
|
UNION
|
|
|
SELECT COALESCE((
|
|
|
- SELECT lag.ts
|
|
|
+ SELECT min(lag.ts, datetime(:end_of_day, 'utc'))
|
|
|
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
|
|
|
+
|
|
|
+ ORDER BY lag.ts ASC
|
|
|
LIMIT 1
|
|
|
-), CURRENT_TIMESTAMP) AS x
|
|
|
+), min(CURRENT_TIMESTAMP, datetime(:end_of_day, 'utc'))) AS x
|
|
|
, activity AS series
|
|
|
, 1 AS y
|
|
|
FROM activities a
|
|
|
WHERE user = :user
|
|
|
-AND datetime(datetime(ts, 'localtime'), 'start of day') = :date
|
|
|
+AND datetime(datetime(ts, 'localtime'), 'start of day') = :start_of_day
|
|
|
UNION
|
|
|
SELECT COALESCE((
|
|
|
- SELECT lag.ts
|
|
|
+ SELECT min(lag.ts, datetime(:end_of_day, 'utc'))
|
|
|
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
|
|
|
+
|
|
|
+ ORDER BY lag.ts ASC
|
|
|
LIMIT 1
|
|
|
-), CURRENT_TIMESTAMP) AS x
|
|
|
+), min(CURRENT_TIMESTAMP, datetime(:end_of_day, 'utc'))) AS x
|
|
|
, activity AS series
|
|
|
, 2 AS y
|
|
|
FROM activities a
|
|
|
WHERE user = :user
|
|
|
-AND datetime(datetime(ts, 'localtime'), 'start of day') = :date
|
|
|
+AND datetime(datetime(ts, 'localtime'), 'start of day') = :start_of_day
|
|
|
) q
|
|
|
-ORDER BY x ASC, y ASC
|
|
|
+ORDER BY series, x ASC, y ASC
|
|
|
;
|