Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / копирование данных из нескольких таблиц / 5 сообщений из 5, страница 1 из 1
04.03.2014, 15:06:35
    #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
04.03.2014, 15:09:52
    #38577852
bochkov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
копирование данных из нескольких таблиц
слишком хитрая постановка задачи,
без поллитры не разобрать
...
Рейтинг: 0 / 0
04.03.2014, 15:31:49
    #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
04.03.2014, 17:00:13
    #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
04.03.2014, 17:32:15
    #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
Форумы / MySQL [игнор отключен] [закрыт для гостей] / копирование данных из нескольких таблиц / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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