min () / max () - неправильный подход. Это только правильно, если значения только по возрастанию. Мне нужно было что-то подобное для курсов валют, которые бывают случайным повышением и понижением.
Это мое решение:
select st.*
from stats_ticker st,
(
select min(rowid) as first, max(rowid) as last --here is magic part 1
from stats_ticker
-- next line is just a filter I need in my case.
-- if you want first/last of the whole table leave it out.
where timeutc between datetime('now', '-1 days') and datetime('now')
) firstlast
WHERE
st.rowid = firstlast.first --and these two rows do magic part 2
OR st.rowid = firstlast.last
ORDER BY st.rowid;
магическая часть 1: в результате выбора элемента выделяется одна строка с первым столбцом, последний из которых содержит rowid.
волшебная часть 2 легко фильтруется по этим двум rowid.
Это лучшее решение, которое я когда-либо придумал. Надеюсь, вам понравится.