Dear all,
I need to perform a kind of partial GROUP BY to determine the beginnings and
ends of sets of identical data. I can't use a full GROUP BY because these sets
can be repeated and their repetition must be conserved. Other database engines
have solutions for this task (like windowing in postgre) but I wonder if there
is an efficient recipe in SQLite.
Example:
=======
Table: mytable
--------
date test
------ ------
1 clim
3 clim
7 amb
10 amb
13 clim
15 clim
20 clim
22 amb
25 amb
Desired result
---------------------
date_from date_to test
--------------- ------------ ------
1 3 clim
7 10 amb
13 15 clim
22 25 amb
(non optimal) solution found
=====================
CREATE VIEW mytablebydate
AS -- Pre-order table to avoid ordering it twice in sub-queries
SELECT * FROM mytable ORDER BY date
CREATE VIEW mytablenext
AS
SELECT date,
test,
(
-- first row > this row
SELECT date -- NULL if not exists
FROM mytablebydate
WHERE date > MT.date
LIMIT 1
) as date_next,
(
-- first row > this row
SELECT test -- NULL if not exists
FROM mytablebydate
WHERE date > MT.date
LIMIT 1
) as test_next
FROM mytable MT
WHERE test != test_next
-- Get desired results
SELECT (
-- Date of the previous row
SELECT MAX( date_next )
FROM mytablenext
WHERE date_next < mt.date
) AS date_from,
date AS date_to, -- this row
test
FROM mytablenext mt
Comments
========
This method returns a Null for the first date_from and the last group is not
returned. It is therefore incomplete. In addition, it involves quite a lot of
subqueries. For completeness, it is inspired by
http://stackoverflow.com/questions/30455227/date-range-for-set-of-same-data/30460263#30460263.
So, is there a better / official way in SQLite ?
Any help will be welcome,
Jonathan
*******************************************************************************
This e-mail message is intended only for the addressee(s) and contains
information which may be confidential. If you are not the intended
recipient please do not read, save, forward, disclose or copy the contents
of this e-mail. If this e-mail has been sent to you in error, please delete
this
e-mail and any copies or links to this e-mail completely and immediately
from your system. We also like to inform you that communication via e-mail
over the Internet is insecure because third parties may have the possibility
to access and manipulate e-mails.
Any views expressed in this message are those of the individual sender,
except where the sender specifically states them to be the views of
The Swatch Group Ltd.
*******************************************************************************
_______________________________________________
sqlite-users mailing list
[email protected]
http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users