4108c08647bdec12b033edf04e36d59eb5e6e6a4
[pulsecounter.git] / DATABASE
1 Given that it is not going to be possible to write data to the sensor MCU,
2 we would need the database structure allowing for flexible adjustment of
3 the "initial value" of the counters.
4
5 1. As a new value for a counter arrives, if the new value is less than
6 the prevously recorded one, we automatically make an adjustment to make
7 the value continue to grow.
8
9 2. At some later time, we may need to change the adjustment value if some
10 pulses where lost.
11
12 3. There should be a way to introduce an adjustment for specified value
13 at specified time (optional).
14
15 4. Count events should be recorded "as is", to allow future changes of
16 processing procedure.
17
18 5. Database design should be optimised to a query that returns a set of
19 (corrected) values of the counter with the times of measurement, limited
20 by the interval of time.
21
22 6. Another (less frequent) query will be for the last recorded (corrected)
23 value of the counter with the time of measurement.
24
25 create table adjustment (timestamp datetime, value int);
26 create table counter    (timestamp datetime, value int);
27
28 insert into adjustment values (datetime('now'), 10);
29 insert into counter values (datetime('now'), 5);
30 insert into counter values (datetime('now'), 10);
31 insert into counter values (datetime('now'), 15);
32 insert into adjustment values (datetime('now'), 30);
33 insert into counter values (datetime('now'), 0);
34 insert into counter values (datetime('now'), 5);
35 insert into counter values (datetime('now'), 10);
36
37 select timestamp, value+adj as value from
38   (select c.timestamp timestamp, c.value value, 
39                 (select value from adjustment a
40                         where a.timestamp <= c.timestamp
41                         order by timestamp desc limit 1) adj from counter c
42   ) t;
43
44
45 sqlite: "SQL error: no such column: c.timestamp"
46
47 mysql:
48 +---------------------+-------+
49 | timestamp           | value |
50 +---------------------+-------+
51 | 2015-12-14 19:16:27 |    15 |
52 | 2015-12-14 19:16:31 |    20 |
53 | 2015-12-14 19:16:35 |    25 |
54 | 2015-12-14 19:16:44 |    30 |
55 | 2015-12-14 19:16:48 |    35 |
56 | 2015-12-14 19:16:51 |    40 |
57 +---------------------+-------+
58 6 rows in set (0.00 sec)
59