Я хочу получать 1 запись в день в час из моей базы данных MariaDB.

У меня есть таблица, структурированная так (с еще несколькими столбцами):

+------------+-----------+
| dayOfMonth | hourOfDay |
+------------+-----------+

Давайте предположим, что эта таблица заполнена так:

+------------+-----------+
| dayOfMonth | hourOfDay |
+------------+-----------+
|         11 |         0 |
|         11 |         0 |
|         11 |         1 |
|         12 |         0 |
|         12 |         0 |
|         12 |         1 |
+------------+-----------+

Что я хочу получить, это (на самом деле все столбцы) (Every hourOfDay для каждого dayOfMonth):

+------------+-----------+
| dayOfMonth | hourOfDay |
+------------+-----------+
|         11 |         0 |
|         11 |         1 |
|         12 |         0 |
|         12 |         1 |
+------------+-----------+

Я смог добиться этого с помощью этого заявления, но это станет слишком долго, если я хочу сделать это в течение всего месяца:

(SELECT * FROM table WHERE dayOfMonth = 11 GROUP BY hourOfDay) 
UNION 
(SELECT * FROM table WHERE dayOfMonth = 12 GROUP BY hourOfDay)
0
Florian7843 15 Авг 2019 в 15:03

2 ответа

Лучший ответ

Вы можете group by dayOfMonth, hourOfDay:

SELECT dayOfMonth, hourOfDay 
FROM table 
GROUP BY dayOfMonth, hourOfDay
ORDER BY dayOfMonth, hourOfDay

Таким образом, вы не можете выбирать другие столбцы (если они существуют), а только агрегировать их с MIN(), MAX(), AVG() и т. Д.
Или используйте DISTINCT:

SELECT DISTINCT dayOfMonth, hourOfDay 
FROM table 
ORDER BY dayOfMonth, hourOfDay
1
forpas 15 Авг 2019 в 12:10

Ваш вопрос неясен. Это преобразует ваши исходные данные в предложенные вами данные:

SELECT DISTINCT
        dayOfMonth, hourOfDay
    FROM tbl;

«Every hourOfDay» - хотите ли вы, чтобы все часы работали по 24 строки в день? Из этого, смотрите функцию «таблица последовательности» (например, seq_0_to_23) в MariaDB.

0
Rick James 15 Авг 2019 в 17:17