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