Проблема с использованием функции 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;