powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / копирование данных из нескольких таблиц
5 сообщений из 5, страница 1 из 1
копирование данных из нескольких таблиц
    #38577848
breakshar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
немогу сообразить как сделать
необходимо взять данные из 3 таблиц и вставить их в 1, так сказать объеденить данные

структура таблиц t1, t2 и t3
id , date_time, price_max, price_min, flag

таблица t_out
id, date_time, price, flag_t1, flag_t2, flag_t3

flag принимает только 3 значения: -1, 0, 1
t1 основная таблица данных, а t2 и t3 - уточнающие данные

необходимо
1) из t1 скопировать date_time, flag в flag_t1, в price брать значение price_max при flag=-1 или price_min при flag=1 и если flag=0 то price=0
2) из t2 и t3 копировать только flag в flag_t2 и flag_t3 соответственно, но условия примерно такие, найти совпадение по price и попадании даты t_out.date_time в интервал между t2.date_time и t2.date_time +1 час(+1 день для t3)
примерно так
Код: sql
1.
t_out.price=found_price AND t_out.date_time>=date_time AND t_out.date_time<DATE_ADD(date_time, INTERVAL 1 HOUR)


found_price - определяется также как и при вставке из t1
добавляемый интервал для t2 1 HOUR, а для t3 1 DAY

первый шаг
Код: sql
1.
2.
INSERT INTO t_out (id, date_time, price, flag_t1)
SELECT id, date_time, IF(flag=-1, price_max, IF(flag=1, price_min, 0 )), flag FROM t1



а 2 шаг сообразить немогу
help
...
Рейтинг: 0 / 0
копирование данных из нескольких таблиц
    #38577852
bochkov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
слишком хитрая постановка задачи,
без поллитры не разобрать
...
Рейтинг: 0 / 0
копирование данных из нескольких таблиц
    #38577889
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
breakshar2) из t2 и t3 копировать только flag в flag_t2 и flag_t3 соответственно, но условия примерно такие, найти совпадение по price и попадании даты t_out.date_time в интервал между t2.date_time и t2.date_time +1 час(+1 день для t3)

И чё?
Код: sql
1.
2.
3.
update t_out, t2
set t_out.flag_t2 = t2.flag
where ... -- а вот тут ни фига не понял
...
Рейтинг: 0 / 0
копирование данных из нескольких таблиц
    #38578013
breakshar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ммм... не знай даже как сформулировать по другому
постораюсь на примере
дата в t1 кратна 10 минутам в t2 кратна часу а в t3 дням
вот примерно набрасал данные
Код: 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.
46.
47.
INSERT INTO t1 (id, date_time, price_max, price_min, flag) values
(1, '2013-04-01 10:00:00', '100', '50', 0),
(2, '2013-04-01 11:20:00', '99', '50', -1),
(3, '2013-04-01 12:10:00', '100', '50', 0),
(4, '2013-04-01 13:50:00', '101', '50', 0),
(5, '2013-04-01 14:10:00', '102', '50', 1),
(6, '2013-04-01 15:30:00', '101', '50', 0),
(7, '2013-04-01 16:10:00', '100', '50', -1),
(8, '2013-04-01 17:40:00', '101', '50', 0),
(9, '2013-04-01 18:10:00', '102', '50', 0),
(10, '2013-04-01 19:20:00', '103', '50', 0),
(11, '2013-04-02 10:00:00', '104', '50', 1),
(12, '2013-04-02 11:10:00', '103', '50', -1),
(13, '2013-04-02 12:10:00', '104', '50', 0),
(14, '2013-04-02 13:40:00', '105', '50', 0),
(15, '2013-04-02 14:40:00', '106', '50', 1),
(16, '2013-04-02 15:10:00', '105', '50', 0),
(17, '2013-04-02 16:30:00', '104', '50', -1),
(18, '2013-04-02 17:30:00', '105', '50', 0),
(19, '2013-04-02 18:40:00', '106', '50', 1),
(20, '2013-04-02 19:10:00', '105', '50', 0),
(21, '2013-04-03 10:00:00', '104', '50', 0),
(22, '2013-04-03 11:50:00', '103', '50', -1),
(23, '2013-04-03 12:40:00', '104', '50', 0),
(24, '2013-04-03 13:10:00', '105', '50', 0),
(25, '2013-04-03 14:50:00', '106', '50', 1),
(26, '2013-04-03 15:10:00', '105', '50', 0),
(27, '2013-04-03 16:00:00', '104', '50', -1),
(28, '2013-04-03 17:10:00', '105', '50', 0),
(29, '2013-04-03 18:50:00', '106', '50', 0),
(30, '2013-04-03 19:00:00', '107', '50', 0)


INSERT INTO t2 (id, date_time, price_max, price_min, flag) values
(1, '2013-04-01 12:00:00', '100', '50', 0),
(2, '2013-04-01 14:00:00', '102', '50', 1),
(3, '2013-04-01 17:00:00', '100', '50', 0),
(4, '2013-04-01 19:00:00', '105', '50', 0),
(5, '2013-04-02 11:00:00', '103', '50', -1),
(6, '2013-04-03 10:00:00', '100', '50', 0),
(7, '2013-04-03 14:00:00', '106', '50', 1),
(8, '2013-04-01 17:00:00', '100', '50', 0),

INSERT INTO t2 (id, date_time, price_max, price_min, flag) values
(1, '2013-04-01 10:00:00', '100', '50', 0),
(2, '2013-04-02 10:00:00', '104', '50', 1),
(3, '2013-04-03 10:00:00', '100', '50', 0),




на выходе необходимо получить
t_out
id date_time price flag_t1 flag_t2 flag_t31 '2013-04-01 10:00:00' '0' 0 0 02 '2013-04-01 11:20:00' '50' -1 0 03 '2013-04-01 12:10:00' '0' 0 0 04 '2013-04-01 13:50:00' '0' 0 0 05 '2013-04-01 14:10:00' '102' 1 1 06 '2013-04-01 15:30:00' '0' 0 0 07 '2013-04-01 16:10:00' '50' -1 0 08 '2013-04-01 17:40:00' '0' 0 0 09 '2013-04-01 18:10:00' '0' 0 0 010 '2013-04-01 19:20:00' '0' 0 0 011 '2013-04-02 10:00:00' '104' 1 0 112 '2013-04-02 11:10:00' '50' -1 -1 013 '2013-04-02 12:10:00' '0' 0 0 014 '2013-04-02 13:40:00' '0' 0 0 015 '2013-04-02 14:40:00' '106' 1 0 016 '2013-04-02 15:10:00' '0' 0 0 017 '2013-04-02 16:30:00' '50' -1 0 018 '2013-04-02 17:30:00' '0' 0 0 019 '2013-04-02 18:40:00' '106' 1 0 020 '2013-04-02 19:10:00' '0' 0 0 021 '2013-04-03 10:00:00' '0' 0 0 022 '2013-04-03 11:50:00' '50' -1 0 023 '2013-04-03 12:40:00' '0' 0 0 024 '2013-04-03 13:10:00' '0' 0 0 025 '2013-04-03 14:50:00' '106' 1 1 026 '2013-04-03 15:10:00' '0' 0 0 027 '2013-04-03 16:00:00' '50' -1 0 028 '2013-04-03 17:10:00' '0' 0 0 029 '2013-04-03 18:50:00' '0' 0 0 030 '2013-04-03 19:00:00' '0' 0 0 0
...
Рейтинг: 0 / 0
копирование данных из нескольких таблиц
    #38578062
Фотография 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.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
mysql> CREATE TABLE t1 (id INT, date_time DATETIME, price_max INT, price_min INT, flag INT);
Query OK, 0 rows affected (0.19 sec)

mysql>
mysql> INSERT INTO t1 (id, date_time, price_max, price_min, flag) values
    -> (1, '2013-04-01 10:00:00', '100', '50', 0),
    -> (2, '2013-04-01 11:20:00', '99', '50', -1),
    -> (3, '2013-04-01 12:10:00', '100', '50', 0),
    -> (4, '2013-04-01 13:50:00', '101', '50', 0),
    -> (5, '2013-04-01 14:10:00', '102', '50', 1),
    -> (6, '2013-04-01 15:30:00', '101', '50', 0),
    -> (7, '2013-04-01 16:10:00', '100', '50', -1),
    -> (8, '2013-04-01 17:40:00', '101', '50', 0),
    -> (9, '2013-04-01 18:10:00', '102', '50', 0),
    -> (10, '2013-04-01 19:20:00', '103', '50', 0),
    -> (11, '2013-04-02 10:00:00', '104', '50', 1),
    -> (12, '2013-04-02 11:10:00', '103', '50', -1),
    -> (13, '2013-04-02 12:10:00', '104', '50', 0),
    -> (14, '2013-04-02 13:40:00', '105', '50', 0),
    -> (15, '2013-04-02 14:40:00', '106', '50', 1),
    -> (16, '2013-04-02 15:10:00', '105', '50', 0),
    -> (17, '2013-04-02 16:30:00', '104', '50', -1),
    -> (18, '2013-04-02 17:30:00', '105', '50', 0),
    -> (19, '2013-04-02 18:40:00', '106', '50', 1),
    -> (20, '2013-04-02 19:10:00', '105', '50', 0),
    -> (21, '2013-04-03 10:00:00', '104', '50', 0),
    -> (22, '2013-04-03 11:50:00', '103', '50', -1),
    -> (23, '2013-04-03 12:40:00', '104', '50', 0),
    -> (24, '2013-04-03 13:10:00', '105', '50', 0),
    -> (25, '2013-04-03 14:50:00', '106', '50', 1),
    -> (26, '2013-04-03 15:10:00', '105', '50', 0),
    -> (27, '2013-04-03 16:00:00', '104', '50', -1),
    -> (28, '2013-04-03 17:10:00', '105', '50', 0),
    -> (29, '2013-04-03 18:50:00', '106', '50', 0),
    -> (30, '2013-04-03 19:00:00', '107', '50', 0);
Query OK, 30 rows affected (0.14 sec)
Records: 30  Duplicates: 0  Warnings: 0

mysql>
mysql> CREATE TABLE t2 (id INT, date_time DATETIME, price_max INT, price_min INT, flag INT);
Query OK, 0 rows affected (0.12 sec)

mysql>
mysql> INSERT INTO t2 (id, date_time, price_max, price_min, flag) values
    -> (1, '2013-04-01 12:00:00', '100', '50', 0),
    -> (2, '2013-04-01 14:00:00', '102', '50', 1),
    -> (3, '2013-04-01 17:00:00', '100', '50', 0),
    -> (4, '2013-04-01 19:00:00', '105', '50', 0),
    -> (5, '2013-04-02 11:00:00', '103', '50', -1),
    -> (6, '2013-04-03 10:00:00', '100', '50', 0),
    -> (7, '2013-04-03 14:00:00', '106', '50', 1),
    -> (8, '2013-04-01 17:00:00', '100', '50', 0);
Query OK, 8 rows affected (0.03 sec)
Records: 8  Duplicates: 0  Warnings: 0

mysql>
mysql> CREATE TABLE t3 (id INT, date_time DATETIME, price_max INT, price_min INT, flag INT);
Query OK, 0 rows affected (0.17 sec)

mysql>
mysql> INSERT INTO t3 (id, date_time, price_max, price_min, flag) values
    -> (1, '2013-04-01 10:00:00', '100', '50', 0),
    -> (2, '2013-04-02 10:00:00', '104', '50', 1),
    -> (3, '2013-04-03 10:00:00', '100', '50', 0);
Query OK, 3 rows affected (0.01 sec)
Records: 3  Duplicates: 0  Warnings: 0

mysql>
mysql> CREATE TABLE t_out (id INT, date_time DATETIME, price INT, flag_t1 INT, flag_t2 INT, flag_t3 INT);
Query OK, 0 rows affected (0.19 sec)

mysql>
mysql> INSERT INTO t_out (id, date_time, price, flag_t1, flag_t2, flag_t3)
    -> SELECT id, date_time, CASE flag WHEN -1 THEN price_max WHEN 1 THEN price_min ELSE 0 END, flag, 0, 0
    -> FROM t1;
Query OK, 30 rows affected (0.03 sec)
Records: 30  Duplicates: 0  Warnings: 0

mysql>
mysql> UPDATE t_out, t2
    -> SET t_out.flag_t2 = t2.flag
    -> WHERE t_out.price = CASE t2.flag WHEN -1 THEN t2.price_max WHEN 1 THEN t2.price_min ELSE 0 END
    -> AND t_out.date_time BETWEEN t2.date_time AND t2.date_time + INTERVAL 1 HOUR;
Query OK, 3 rows affected (0.01 sec)
Rows matched: 7  Changed: 3  Warnings: 0

mysql>
mysql> UPDATE t_out, t3
    -> SET t_out.flag_t3 = t3.flag
    -> WHERE t_out.price = CASE t3.flag WHEN -1 THEN t3.price_max WHEN 1 THEN t3.price_min ELSE 0 END
    -> AND t_out.date_time BETWEEN t3.date_time AND t3.date_time + INTERVAL 1 DAY;
Query OK, 3 rows affected (0.01 sec)
Rows matched: 17  Changed: 3  Warnings: 0

mysql> SELECT * FROM t_out;
+------+---------------------+-------+---------+---------+---------+
| id   | date_time           | price | flag_t1 | flag_t2 | flag_t3 |
+------+---------------------+-------+---------+---------+---------+
|    1 | 2013-04-01 10:00:00 |     0 |       0 |       0 |       0 |
|    2 | 2013-04-01 11:20:00 |    99 |      -1 |       0 |       0 |
|    3 | 2013-04-01 12:10:00 |     0 |       0 |       0 |       0 |
|    4 | 2013-04-01 13:50:00 |     0 |       0 |       0 |       0 |
|    5 | 2013-04-01 14:10:00 |    50 |       1 |       1 |       0 |
|    6 | 2013-04-01 15:30:00 |     0 |       0 |       0 |       0 |
|    7 | 2013-04-01 16:10:00 |   100 |      -1 |       0 |       0 |
|    8 | 2013-04-01 17:40:00 |     0 |       0 |       0 |       0 |
|    9 | 2013-04-01 18:10:00 |     0 |       0 |       0 |       0 |
|   10 | 2013-04-01 19:20:00 |     0 |       0 |       0 |       0 |
|   11 | 2013-04-02 10:00:00 |    50 |       1 |       0 |       1 |
|   12 | 2013-04-02 11:10:00 |   103 |      -1 |      -1 |       0 |
|   13 | 2013-04-02 12:10:00 |     0 |       0 |       0 |       0 |
|   14 | 2013-04-02 13:40:00 |     0 |       0 |       0 |       0 |
|   15 | 2013-04-02 14:40:00 |    50 |       1 |       0 |       1 |
|   16 | 2013-04-02 15:10:00 |     0 |       0 |       0 |       0 |
|   17 | 2013-04-02 16:30:00 |   104 |      -1 |       0 |       0 |
|   18 | 2013-04-02 17:30:00 |     0 |       0 |       0 |       0 |
|   19 | 2013-04-02 18:40:00 |    50 |       1 |       0 |       1 |
|   20 | 2013-04-02 19:10:00 |     0 |       0 |       0 |       0 |
|   21 | 2013-04-03 10:00:00 |     0 |       0 |       0 |       0 |
|   22 | 2013-04-03 11:50:00 |   103 |      -1 |       0 |       0 |
|   23 | 2013-04-03 12:40:00 |     0 |       0 |       0 |       0 |
|   24 | 2013-04-03 13:10:00 |     0 |       0 |       0 |       0 |
|   25 | 2013-04-03 14:50:00 |    50 |       1 |       1 |       0 |
|   26 | 2013-04-03 15:10:00 |     0 |       0 |       0 |       0 |
|   27 | 2013-04-03 16:00:00 |   104 |      -1 |       0 |       0 |
|   28 | 2013-04-03 17:10:00 |     0 |       0 |       0 |       0 |
|   29 | 2013-04-03 18:50:00 |     0 |       0 |       0 |       0 |
|   30 | 2013-04-03 19:00:00 |     0 |       0 |       0 |       0 |
+------+---------------------+-------+---------+---------+---------+
30 rows in set (0.00 sec)
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / копирование данных из нескольких таблиц
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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