Проблема с использованием функции ROW_NUMBER () в MariaDB

Я хотел бы иметь столбец с номером строки в выводе таблицы выбора, но когда я пытаюсь использовать функцию ROW_NUMBER(), MariaDB выдает синтаксическую ошибку. В Интернете есть несколько ссылок (http://www.mysqltutorial.org/mysql-window-functions/mysql-row_number-function/), но пока мне это не удалось. Вот сегмент моей таблицы MariaDB:

+---------------------+------------+  
| date_reading        | temp_patio |
|---------------------+------------+  
| 2019-09-03 06:26:00 |       17.6 |  
| 2019-09-03 06:33:00 |       17.5 |  
| 2019-09-03 06:40:00 |       17.5 |  
| 2019-09-03 06:46:00 |       17.5 |  
| 2019-09-03 06:53:00 |       17.4 |  
| 2019-09-03 07:00:00 |       17.4 |  
| 2019-09-03 07:07:00 |       17.4 |  
| 2019-09-03 07:13:00 |       17.4 |

В документе говорится, что параметры для параметра "OVER ()" являются необязательными, но я пробовал как с предложением OVER (), так и без него, а также с предложением ORDER BY и без него.

Вот моя команда выбора:

выберите ROW_NUMBER() OVER () как Therow, * из MyData, где Date_Reading > Now()- INTERVAL 3 HOUR;

При желании я попробовал без OVER () пункт, а также использование OVER ( ORDER BY ID).

Моя версия MariaDB

Версия сервера: 10.1.38-MariaDB-0+deb9u1 Raspbian 9.0

Может кому помочь?... РДК

1 ответ

Решение

Оконные функции поддерживаются только в MariaDB 10.2 или более поздней версии.

MariaDB 10.2 или выше:

SELECT 
    MyData.*,
    ROW_NUMBER() OVER ( ORDER BY ID ) as Therow
FROM MyData 
WHERE Date_Reading > Now()- INTERVAL 3 HOUR;

Для более низкой версии:

Мы можем использовать переменную MySQL для выполнения этой работы.

SELECT 
    MyData.*, 
    @row_num:= @row_num + 1 AS Therow
FROM 
    MyData, 
    (SELECT @row_num:= 0 AS num) AS c
WHERE Date_Reading > Now()- INTERVAL 3 HOUR
ORDER BY test.`date` ASC;
Другие вопросы по тегам