With a compound index on ID and DATE performance is fine.
Thanks again.

RBS

On Tue, Nov 17, 2015 at 12:45 AM, Bart Smissaert <bart.smissaert at gmail.com>
wrote:

> Actually it is slower than I thought, taking some 90 secs for only 7000
> records.
> Will if any compound index can speed this up.
>
> RBS
>
> On Tue, Nov 17, 2015 at 12:09 AM, Igor Tandetnik <igor at tandetnik.org>
> wrote:
>
>> On 11/16/2015 6:37 PM, Bart Smissaert wrote:
>>
>>> Now, what I need is for every row the count of preceding rows where
>>> the ID is the same as the ID of the current row, the date is less than
>>> the
>>> date of the current row and the value is >= 10 and <= 20. If the value is
>>> outside
>>> this range then it should stop the count for that current row. If the
>>> value
>>> of the current row is outside this 10 to 20 range than the result is 0
>>> and
>>> there
>>> is no need to count preceding rows.
>>>
>>
>> Personally, I'd do it in application code. It can be done in single pass.
>> If you insist on pure SQL solution, then something like this:
>>
>> select ID, DATE, VALUE,
>> (select count(*) from TEST prev
>>  where prev.ID = T.ID and prev.DATE < T.DATE and prev.DATE >
>>    coalesce((select max(DATE) from TEST boundary
>>      where boundary.ID = T.ID and boundary.DATE <= T.DATE
>>      and not(boundary.VALUE between 10 and 20)), '')
>> ) as COUNT_PRECEDING_IN_RANGE
>> from TEST T;
>>
>> Performance will likely be, shall we say, less than stellar.
>> --
>> Igor Tandetnik
>>
>> _______________________________________________
>> sqlite-users mailing list
>> sqlite-users at mailinglists.sqlite.org
>> http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users
>>
>
>

Reply via email to