> I suppose I could copy the data table into a temporary
> table ... documenataion quarantees AUTOINCREMENT fields
> to be "monotonically increasing" ...
"Monotonically increasing" does not mean that for every key k
there will be a key (k-1). In fact, if you ever delete a row in
an autoincrement table, you're guaranteed to have a "hole" in
your keys.
You don't really need a manufactured key. Since your arithmetic
depends on the timestamp being unique, you can use the timestamp
as your primary key; but you should define the key to enforce
existence and uniqueness:
create table bytes (ts int primary key, bytes int);
insert into bytes (ts, bytes) values (1121484797, 11234);
insert into bytes (ts, bytes) values (1121484923, 14583);
insert into bytes (ts, bytes) values (1121485008, 19267);
insert into bytes (ts, bytes) values (1121484801, 12789);
insert into bytes (ts, bytes) values (1121485051, 23005);
insert into bytes (ts, bytes) values (1121485832, 28436);
select datetime(ts, 'unixepoch'), bytes from bytes
order by ts;
||
\/
datetime(ts, 'unixepoch') bytes
- --
2005-07-16 03:33:1711234
2005-07-16 03:33:2112789
2005-07-16 03:35:2314583
2005-07-16 03:36:4819267
2005-07-16 03:37:3123005
2005-07-16 03:50:3228436
select datetime(ts, 'unixepoch'), bytes from bytes
where datetime(ts, 'unixepoch') between
'2005-07-16 03:35:01' and '2005-07-16 03:40:00'
order by ts;
||
\/
datetime(ts, 'unixepoch') bytes
- --
2005-07-16 03:35:2314583
2005-07-16 03:36:4819267
2005-07-16 03:37:3123005
select datetime(t2.ts, 'unixepoch') 'time',
(0.0+t2.bytes-t1.bytes)/(t2.ts-t1.ts) 'byte rate'
from bytes t1, bytes t2
where t1.ts =
(select max(t3.ts) from bytes t3 where t3.ts < t2.ts)
and datetime(t2.ts, 'unixepoch') between
'2005-07-16 03:35:01' and '2005-07-16 03:40:00'
order by t2.ts ;
||
\/
time byte rate
---
2005-07-16 03:35:23 14.7049180327869
2005-07-16 03:36:48 55.1058823529412
2005-07-16 03:37:31 86.9302325581395
But SQL is not designed to do sequential processing of data.
You'll probably get better performance and more readable code if
you retrieve your data set with SQL
select bytes, ts from bytes
where datetime(ts, 'unixepoch') between
'2005-07-16 03:35:01' and '2005-07-16 03:40:00'
order by ts;
and use your host language to do the arithmetic.
Regards