Функция MYSQL Возвращает записи на основе последовательного значения столбца - PullRequest
0 голосов
/ 01 июля 2018

Как написать функцию MYSQL для возврата записей на основе последовательного значения столбца (int или date или timestamp).

Например :

// id подряд 4 раза запись , id: 5,6,7,8

select * from employee where consecutive(id,4); 

// дата подряд 4 даты записи

select * from employee where consecutive(date,4); 

// до тех пор, пока id является последовательным, вернуть все.

select * from employee where consecutive (date,null);

1 Ответ

0 голосов
/ 01 июля 2018

В стандарте ISO SQL 2003 или более поздней версии я бы использовал ROW_NUMBER() OVER ( ORDER BY id ) в сочетании с OFFSET. Этот запрос работает в SQL Server 2012 или более поздней версии, Oracle 10g или более поздней версии, PostgreSQL или MySQL 8 или более поздней версии - но вряд ли кто-либо использует MySQL 8 ...

Для вашего первого примера:

SELECT
    employee.*
FROM
    (
        SELECT
            id,
            ROW_NUMBER() OVER ( ORDER BY id ) AS rn
        FROM
            employee
    ) AS sq

    INNER JOIN employee ON employee.id = sq.id
ORDER BY
    id
OFFSET
    0 ROWS FETCH 4

К счастью, MySQL позволяет увеличивать переменные и оценивать другие нечистые выражения в SELECT, как если бы они вычислялись итеративно (это неверное предположение для «мышления SQL»).

Итак, вот хитрость для получения ранга строки в MySQL, используя встроенную инициализацию :

SELECT
    *,
    @rank := @rank + 1 AS rn
FROM
    employee,
    ( SELECT @rank := 0 )
ORDER BY
    employee.id

Так что мы можем использовать это как наш подзапрос:

SELECT
    employee.*
FROM
    (
        SELECT
            employee.id,
            @rank := @rank + 1 AS rn
        FROM
            employee,
            ( SELECT @rank := 0 )
        ORDER BY
            employee.id
    ) AS sq

    INNER JOIN employee ON employee.id = sq.id

ORDER BY
    id
LIMIT
    4 OFFSET 0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...