I have a table and data like this:
create table AmountObjects
(
objectId integer,
unixTimestamp integer,
amount integer,
PRIMARY KEY
(
[objectId] ASC,
[unixTimestamp] ASC
)
);
insert into AmountObjects values (1, 1, 33);
insert into AmountObjects values (1, 2, 33);
insert into AmountObjects values (1, 3, 33);
insert into AmountObjects values (1, 4, 33);
insert into AmountObjects values (1, 5, 33);
insert into AmountObjects values (1, 6, 33);
insert into AmountObjects values (1, 7, 33);
insert into AmountObjects values (1, 8, 33);
insert into AmountObjects values (1, 9, 33);
insert into AmountObjects values (1, 10, 33);
I want to query last records filtered by date and cumulative amount, but queries like this scan all records by object:
select
a.objectId,
a.unixTimestamp,
a.amount,
s.total
from AmountObjects a
cross apply
(
select sum(amount) total from AmountObjects stat
where a.unixTimestamp <= stat.unixTimestamp and a.objectId = stat.objectId
) s
where
unixTimestamp >= 9
or s.total <= 150
My question is: how to query data without scann all data by object?
Thanks