У меня есть две таблицы, и я хотел бы увеличивать поле даты и времени каждые 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
Paolo Rossi 25 Окт 2019 в 14:29

1 ответ

Лучший ответ

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

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 и далее).

1
Tim Biegeleisen 25 Окт 2019 в 13:08