Thanks. You understood my intention, and confirmed my fear that I couldn't do 
it efficiently in SQL.
David


      From: Igor Tandetnik <igor at tandetnik.org>
 To: sqlite-users at mailinglists.sqlite.org 
 Sent: Thursday, February 18, 2016 9:59 AM
 Subject: Re: [sqlite] MIN/MAX query

On 2/18/2016 4:55 AM, R Smith wrote:
> First of, your intended results require a fundamentally wrong assumption
> about Sets. (SQL is essentially operating on SETs and sets have no order).
> You should really have another column, like a primary key ID that notes
> the position of each line

Looks like L is precisely such an ID. The OP is looking for runs of 
identical (I, V) pairs when the table is scanned in order by (I, L) (or, 
in other words, for each value of I, runs of V's in order by L).

If that's the case, then

select I, min(L) MinL, max(L) maxL, V
from MyTable t
group by I,
? (select min(L) from MyTable t2 where t2.I=t.I and t2.V=t.V and t2.L 
<= t.L
? ? and not exists (
? ? ? select 1 from MyTable t3 where t3.I=t.I and t3.V != t.V
? ? ? and t3.L between t2.L and t.L)
? )

Though frankly, I'd implement this logic in application code. Just scan 
the table with "select * from MyTable order by I, L" and compute the 
runs in one pass, in linear time. The query above runs in O(N^3) time 
(though an index on (I, L) might improve things) - only really suitable 
as a toy example.
-- 
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