Mysql - инкремент datetime каждые n строк в представлении - PullRequest
1 голос
/ 25 октября 2019

У меня есть две таблицы, и я хотел бы увеличивать поле даты и времени каждые n строк

jobs

| job_id | group_id |     start_date   | limit | delay  |
+--------+----------+------------------+-------+--------+
|    1   |    1     | 2019-10-10 08:00 |   2   |  3600  |
|    2   |    1     | 2019-10-10 14:00 |   0   |    0   |
|    3   |    2     | 2019-10-10 14:00 |   1   |  1800  |


users

| user_id | group_id | user_name  |  row_num |
+---------+----------+------------+----------+
|  xxx    |    1     | Homer      |     1    |
|  xxx    |    1     | Barney     |     2    |
|  xxx    |    1     | Bart       |     3    |
|  xxx    |    1     | Ned        |     4    |
|  xxx    |    1     | Marge      |     5    |
|  xxx    |    1     | Moe        |     6    |
|  xxx    |    1     | Maggie     |     7    |
|  xxx    |    2     | Lisa       |     1    |
|  xxx    |    2     | Otto       |     2    |
|  xxx    |    2     | Marge      |     3    |

результат должен быть таким

|  job_id  | group_id | user_name | start_date        |
+----------+----------+-----------+-------------------+
|    1     |    1     | Homer     | 2019-10-10 08:00  |
|    1     |    1     | Barney    | 2019-10-10 08:00  |
|    1     |    1     | Bart      | 2019-10-10 09:00  |
|    1     |    1     | Ned       | 2019-10-10 09:00  |
|    1     |    1     | Marge     | 2019-10-10 10:00  |
|    1     |    1     | Moe       | 2019-10-10 10:00  |
|    ...   |   ...    | ...       | ...               |
|    2     |    1     | Homer     | 2019-10-10 14:00  |
|    2     |    1     | Barney    | 2019-10-10 14:00  |
|    2     |    1     | Bart      | 2019-10-10 14:00  |
|    2     |    1     | Ned       | 2019-10-10 14:00  |
|    2     |    1     | Marge     | 2019-10-10 14:00  |
|    2     |    1     | Moe       | 2019-10-10 14:00  |
|    ...   |   ...    | ...       | ...               |
|    3     |    2     | Lisa      | 2019-10-10 14:00  |
|    3     |    2     | Otto      | 2019-10-10 14:30  |
|    3     |    2     | Marge     | 2019-10-10 15:00  |
|    ...   |   ...    | ...       | ...               |

Для достижения этой цели я создалPHP-скрипт, который извлекает данные, делает цикл и вставляет их в таблицу.
Я хотел бы знать, если вы можете сделать это только с помощью запроса MySQL и как я могу это сделать.

Спасибо

1 Ответ

1 голос
/ 25 октября 2019

Вот один из вариантов:

SELECT
    j.job_id,
    j.group_id,
    u.user_name,
    TIMESTAMPADD(HOUR, FLOOR((u.row_num-1) / 2), j.start_date) AS start_date
FROM jobs j
INNER JOIN users u
    ON j.group_id = u.group_id
ORDER BY
    j.job_id,
    j.group_id,
    u.row_num;

Логика здесь в том, что мы добавляем один дополнительный час к дате начала, для каждого двух увеличения в row_num, начиная свторой шаг в номер строки (т.е. с 3 и далее).

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