powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Разделение временной диаграммы на области
8 сообщений из 8, страница 1 из 1
Разделение временной диаграммы на области
    #39651163
novikovma
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Коллеги, всем добрый день.

Есть такая задача:
Существует таблица data, которая представляет собой временную диаграмму, а именно:
uid,I,datеtime
4,221,2018-05-03 15:57:30
5,221,2018-05-03 15:57:37
6,321,2018-05-03 15:57:40
7,521,2018-05-03 15:57:42
8,521,2018-05-03 15:57:46
9,521,2018-05-03 15:57:53
a,522,2018-05-03 15:57:57
b,523,2018-05-03 15:58:00
c,533,2018-05-03 15:58:05
d,531,2018-05-03 16:13:56
e,534,2018-05-03 16:14:55
f,521,2018-05-03 16:15:42
10,521,2018-05-03 17:57:46
11,521,2018-05-03 17:57:53
12,522,2018-05-03 17:57:57
13,523,2018-05-03 18:58:00
...
и т.д.

uid в базе записан как text, но по факту - это номер записи в шестандцатиричном формате

Данную временную диаграмму необходимо поделить на этапы (e1,e2,e3) по признаку I<400(e1);401<I<525(e2);I>525(e3)

То есть необходимо запросом получить список этапов с указанием начала и конца этапа:

тип этапа;uid записи начала этапа;время начала;uid записи конца этапа;время конца этапа;суммарное время этапа (например в секундах)
e1; 4; 2018-05-03 15:57:30; 6; 2018-05-03 15:57:40; 10
e2; 7; 2018-05-03 15:57:42; b; 2018-05-03 15:58:00; 18
e3; c; 2018-05-03 15:58:05; e; 2018-05-03 16:14:55; 1010
e1; f; 2018-05-03 16:15:42; 13; 2018-05-03 18:58:00; 9738

Это похоже на какой-то рекурсивный mysql запрос, как я понимаю...
Куда смотреть?
...
Рейтинг: 0 / 0
Разделение временной диаграммы на области
    #39651169
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
novikovmaДанную временную диаграмму необходимо поделить на этапы (e1,e2,e3) по признаку I<400(e1);401<I<525(e2);I>525(e3)Создайте для этих "этапов" таблицу (name - min - max). А дальше связь, тупой отбор по BETWEEN, группировка и MIN/MAX.
...
Рейтинг: 0 / 0
Разделение временной диаграммы на области
    #39651178
novikovma
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Как-то не очень срастается.
Ну выбираю я все записи, которые соответствуют условию I<400.
Получаю результат
4,221,2018-05-03 15:57:30
5,221,2018-05-03 15:57:37
6,321,2018-05-03 15:57:40
f,221,2018-05-03 16:15:42
10,221,2018-05-03 17:57:46
11,221,2018-05-03 17:57:53
12,222,2018-05-03 17:57:57
13,223,2018-05-03 18:58:00

Выбраны все записи которые соответствуют данному этапу.

А как его разбить на два этапа?
с 4-й записи по 6-ю и с f по 13?
...
Рейтинг: 0 / 0
Разделение временной диаграммы на области
    #39651184
novikovma
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Наверно вопрос сводится к таком:

Необходимо выделить крайние записи, между которыми нумерация uid идет последовательно. Видимо, единственное условие для выборки именно такое.

Кто-то навскидку скажет, куда смотреть?
...
Рейтинг: 0 / 0
Разделение временной диаграммы на области
    #39651209
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
mysql> CREATE TABLE data (uid VARCHAR(32), n INT, dt DATETIME);
Query OK, 0 rows affected (0.25 sec)

mysql> INSERT INTO data (uid, n, dt) VALUES
    -> ('4',221,'2018-05-03 15:57:30'),
    -> ('5',221,'2018-05-03 15:57:37'),
    -> ('6',321,'2018-05-03 15:57:40'),
    -> ('7',521,'2018-05-03 15:57:42'),
    -> ('8',521,'2018-05-03 15:57:46'),
    -> ('9',521,'2018-05-03 15:57:53'),
    -> ('a',522,'2018-05-03 15:57:57'),
    -> ('b',523,'2018-05-03 15:58:00'),
    -> ('c',533,'2018-05-03 15:58:05'),
    -> ('d',531,'2018-05-03 16:13:56'),
    -> ('e',534,'2018-05-03 16:14:55'),
    -> ('f',521,'2018-05-03 16:15:42'),
    -> ('10',521,'2018-05-03 17:57:46'),
    -> ('11',521,'2018-05-03 17:57:53'),
    -> ('12',522,'2018-05-03 17:57:57'),
    -> ('13',523,'2018-05-03 18:58:00');
Query OK, 16 rows affected (0.04 sec)
Records: 16  Duplicates: 0  Warnings: 0

mysql> CREATE TABLE ranges(name VARCHAR(32), nFrom INT, nTill INT);
Query OK, 0 rows affected (0.21 sec)

mysql> INSERT INTO ranges(name,nFrom,nTill) VALUES
    -> ('e1',0,400),
    -> ('e2',401,524),
    -> ('e3',525,65535);
Query OK, 3 rows affected (0.04 sec)
Records: 3  Duplicates: 0  Warnings: 0

mysql> SELECT r.name, MIN(d.uid), MIN(d.dt), MAX(d.uid), MAX(d.dt), UNIX_TIMESTAMP(MAX(d.dt))-UNIX_TIMESTAMP(MIN(d.dt)) delta
    -> FROM data d, ranges r
    -> WHERE d.n BETWEEN r.nFrom AND r.nTill
    -> GROUP BY r.name;
+------+------------+---------------------+------------+---------------------+-------+
| name | MIN(d.uid) | MIN(d.dt)           | MAX(d.uid) | MAX(d.dt)           | delta |
+------+------------+---------------------+------------+---------------------+-------+
| e1   | 4          | 2018-05-03 15:57:30 | 6          | 2018-05-03 15:57:40 |    10 |
| e2   | 10         | 2018-05-03 15:57:42 | f          | 2018-05-03 18:58:00 | 10818 |
| e3   | c          | 2018-05-03 15:58:05 | e          | 2018-05-03 16:14:55 |  1010 |
+------+------------+---------------------+------------+---------------------+-------+
3 rows in set (0.00 sec)
...
Рейтинг: 0 / 0
Разделение временной диаграммы на области
    #39651228
novikovma
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Круто!
Конечно, часть записей пропало, но в целом подход понятен.

Спасибо огромное!
...
Рейтинг: 0 / 0
Разделение временной диаграммы на области
    #39651236
novikovma
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Oh Wait.

В результате данного запроса всегда будет 3 результата.
Если этапы будут повторяться, то чуда не произойдет :-(

Например:

INSERT INTO data (uid, n, dt) VALUES
-> ('4',221,'2018-05-03 15:57:30'),
-> ('5',221,'2018-05-03 15:57:37'),
-> ('6',321,'2018-05-03 15:57:40'),
-> ('7',521,'2018-05-03 15:57:42'),
-> ('8',521,'2018-05-03 15:57:46'),
-> ('9',521,'2018-05-03 15:57:53'),
-> ('a',522,'2018-05-03 15:57:57'),
-> ('b',523,'2018-05-03 15:58:00'),
-> ('c',533,'2018-05-03 15:58:05'),
-> ('d',531,'2018-05-03 16:13:56'),
-> ('e',534,'2018-05-03 16:14:55'),
-> ('f',541,'2018-05-03 16:15:42'),
-> ('10',221,'2018-05-03 17:57:46'),
-> ('11',221,'2018-05-03 17:57:53'),
-> ('12',222,'2018-05-03 17:57:57'),
-> ('13',523,'2018-05-03 18:58:00');

Должно быть 4 строки:
E1 от записи 4 до 6
E2 от 6 до b
E3 от c до f
E1 от 10 до 13
...
Рейтинг: 0 / 0
Разделение временной диаграммы на области
    #39651361
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
novikovmaподход понятен.Собсно это и была демонстрация подхода - как нетрудно заметить, я даже не озаботился сведением результата с показанных Вами.
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Разделение временной диаграммы на области
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]