On 15/02/2017 18:34, E.Pasma wrote:

Hello, the query below is simpler. May be slower. But looks pretty relational. Thanks, E Pasma.

create table T(date integer,test char(12));
insert into T
values (1,'clim'),(3,'clim'),(7,'amb'),(10,'amb'),(12,'xxx'),
(13,'clim'),(15,'clim'),(20,'clim'),(22,'amb'),(25,'amb');

select min(date) as fromdate, max(date) as enddate, test
from    (--get closest preceeding different key
    select t.*, max(t2.date) as key2
    from t
    left join t t2
    on t2.date<t.date and t2.test<>t.test
    group by t.date
        )
group by key2

Quite nice solution indeed!
For those who may feel uncomfortable with outer joins, the from clause could be written as a subquery:

from (select date, test, (select  max(date)
                                          from    t t2
                                          where  t2.date < t.date
and t2.test <> t.test) as key2)

Thanks

J-L

_______________________________________________
sqlite-users mailing list
sqlite-users@mailinglists.sqlite.org
http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users

Reply via email to