SQLite: первая и последняя строка выборки


Автор: Artix (user.su)

Задача:

Есть некоторая таблица с датированными данными.
Нужно вывести таблицу в порядке возрастания даты и 
для первой и последней строки показать стартовые и финальные значения определенного столбца.


Решение:

/* Проверено на Firebird */

CREATE TABLE TEST (
    TEST_DATE INTEGER,
    TEST_VALUE VARCHAR(20)
);

INSERT INTO TEST VALUES (5, 'str5');
INSERT INTO TEST VALUES (25, 'str25');
INSERT INTO TEST VALUES (15, 'str15');
INSERT INTO TEST VALUES (10, 'str10');
INSERT INTO TEST VALUES (20, 'str20');

WITH T AS (
    SELECT
        MAX(R) OVER (PARTITION BY TEST_DATE) AS M,
        X.*
    FROM (
        SELECT 
            ROW_NUMBER() OVER (ORDER BY TEST_DATE) as R,
            TEST.*
        FROM TEST 
        ORDER BY TEST_DATE
    ) X
)
SELECT
    TEST_DATE,
    TEST_VALUE,
    IIF(R=1,TEST_VALUE,0) as START_VALUE,
    IIF(R=M,TEST_VALUE,0) as STOP_VALUE
FROM T