|
Объединение двух таблиц
|
|||
---|---|---|---|
#18+
Здравствуйте. С sql только начал знакомиться. Есть таблица table1: Есть таблица table2: Задача получить такую таблицу: То есть нужно получить самые новые по времени значения для всех объектов. Столбец clock - это метка времени. Нагуглил про order by clock desc limit 1 При выполнении этого запроса: SELECT * FROM table 1 AS t1, dblink(‘параметры подключения к серверу’, ‘SELECT value, clock from table2 order by clock desc limit 1’) AS t2(value numeric, clock integer) WHERE t1.id = t2.id Выдает результат: Ну то есть вторую строчку не выдает. Я понимаю, что я как-то неправильно использую “order by clock desc limit 1”, но пока не понял как правильно. Подскажите пожалуйста. Сижу гуглю, но пока не смог разобраться, а сделать надо быстро. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.06.2019, 13:43 |
|
Объединение двух таблиц
|
|||
---|---|---|---|
#18+
limit 1 стоит одна запись и выдаётся ... |
|||
:
Нравится:
Не нравится:
|
|||
24.06.2019, 14:04 |
|
Объединение двух таблиц
|
|||
---|---|---|---|
#18+
982183limit 1 стоит одна запись и выдаётся Да, я как раз экспериментировал сейчас с этим числом. Можно поставить 2 и будет иногда возвращаться 1 строка, а иногда 2... В общем чувствую, что не тот путь... ... |
|||
:
Нравится:
Не нравится:
|
|||
24.06.2019, 14:07 |
|
Объединение двух таблиц
|
|||
---|---|---|---|
#18+
Читаю про LEFT OUTER JOIN. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.06.2019, 14:08 |
|
Объединение двух таблиц
|
|||
---|---|---|---|
#18+
Код: sql 1. 2.
... |
|||
:
Нравится:
Не нравится:
|
|||
24.06.2019, 14:10 |
|
Объединение двух таблиц
|
|||
---|---|---|---|
#18+
clock - какой тип поля? В группировку надо включать id, т.е. на каждый id искать минимальное\максимальное значение clock. Если clock имеет тип timestamp, то будет Код: sql 1. 2. 3.
... |
|||
:
Нравится:
Не нравится:
|
|||
24.06.2019, 14:22 |
|
Объединение двух таблиц
|
|||
---|---|---|---|
#18+
А ID всего два, или может быть много? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.06.2019, 14:22 |
|
Объединение двух таблиц
|
|||
---|---|---|---|
#18+
982183А ID всего два, или может быть много? id много ... |
|||
:
Нравится:
Не нравится:
|
|||
24.06.2019, 14:24 |
|
Объединение двух таблиц
|
|||
---|---|---|---|
#18+
neya1, и доджойни первую таблицу Код: sql 1. 2. 3. 4. 5. 6. 7. 8.
... |
|||
:
Нравится:
Не нравится:
|
|||
24.06.2019, 14:25 |
|
Объединение двух таблиц
|
|||
---|---|---|---|
#18+
Guzyaclock - какой тип поля? [/src] Во факту это метка времени, но почему-то тип данных integer... ... |
|||
:
Нравится:
Не нравится:
|
|||
24.06.2019, 14:25 |
|
Объединение двух таблиц
|
|||
---|---|---|---|
#18+
fix courtneya1, и доджойни первую таблицу Код: sql 1. 2. 3. 4. 5. 6. 7. 8.
... |
|||
:
Нравится:
Не нравится:
|
|||
24.06.2019, 14:25 |
|
Объединение двух таблиц
|
|||
---|---|---|---|
#18+
neya1, попробуйте Код: sql 1. 2. 3.
... |
|||
:
Нравится:
Не нравится:
|
|||
24.06.2019, 14:39 |
|
Объединение двух таблиц
|
|||
---|---|---|---|
#18+
Guzya, court, спасибо за ответы. Буду пробовать. Сейчас соображаю как прикрутить dblink к вашим вариантам. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.06.2019, 14:46 |
|
Объединение двух таблиц
|
|||
---|---|---|---|
#18+
Guzya, вроде так должно быть... select t1.id, t1.object from table1 t1, dblink('параметры подключения к серверу','SELECT value, to_timestamp(clock) from table2') AS t2(value numeric, clock timestamp) join t2 on t2.id=t1.id where (t2.id, t2.clock) in (select id, max(clock) from t2 group by id); Но возвращается: ERROR: relation "t2" does not exist LINE 2: join t2 on t2.itemid=t1.itemid Я наверное балсбес снова чего-то не так понял. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.06.2019, 15:15 |
|
Объединение двух таблиц
|
|||
---|---|---|---|
#18+
neya1, Поправил немножко, но результат прежний: select t1.id, t1.object from table1 t1, dblink('параметры подключения к серверу','SELECT id, value, to_timestamp(clock) from table2') AS t2(id bigint, value numeric, clock timestamp) join t2 on t2.id=t1.id where (t2.id, t2.clock) in (select id, max(clock) from t2 group by id); ... |
|||
:
Нравится:
Не нравится:
|
|||
24.06.2019, 15:22 |
|
Объединение двух таблиц
|
|||
---|---|---|---|
#18+
neya1neya1, Поправил немножко, но результат прежний: select t1.id, t1.object from table1 t1, dblink('параметры подключения к серверу','SELECT id, value, to_timestamp(clock) from table2') AS t2(id bigint, value numeric, clock timestamp) join t2 on t2.id=t1.id where (t2.id, t2.clock) in (select id, max(clock) from t2 group by id);так вроде Код: sql 1. 2.
... |
|||
:
Нравится:
Не нравится:
|
|||
24.06.2019, 15:37 |
|
Объединение двух таблиц
|
|||
---|---|---|---|
#18+
courtneya1neya1, Поправил немножко, но результат прежний: select t1.id, t1.object from table1 t1, dblink('параметры подключения к серверу','SELECT id, value, to_timestamp(clock) from table2') AS t2(id bigint, value numeric, clock timestamp) join t2 on t2.id=t1.id where (t2.id, t2.clock) in (select id, max(clock) from t2 group by id);так вроде Код: sql 1. 2.
нее, не то "ругается" на подзапрос в where ... |
|||
:
Нравится:
Не нравится:
|
|||
24.06.2019, 15:38 |
|
Объединение двух таблиц
|
|||
---|---|---|---|
#18+
neya1, пробуй так Код: sql 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
24.06.2019, 15:40 |
|
Объединение двух таблиц
|
|||
---|---|---|---|
#18+
Попробуйте создать view к таблице table2 и уже ее использовать в запросе. Код: sql 1. 2. 3.
и потом Код: sql 1. 2. 3.
... |
|||
:
Нравится:
Не нравится:
|
|||
24.06.2019, 15:42 |
|
Объединение двух таблиц
|
|||
---|---|---|---|
#18+
court, ERROR: column t2.rn does not exist LINE 4: where t2.id=t1.id and t2.rn=1 ... |
|||
:
Нравится:
Не нравится:
|
|||
24.06.2019, 15:52 |
|
Объединение двух таблиц
|
|||
---|---|---|---|
#18+
neya1court, ERROR: column t2.rn does not exist LINE 4: where t2.id=t1.id and t2.rn=1а ты его добавил ? :) Есть это ? court Код: sql 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
24.06.2019, 16:01 |
|
Объединение двух таблиц
|
|||
---|---|---|---|
#18+
court, Да, добавил. Если выполнить отдельно: select t1.id, t1.object from table1 t1, dblink('параметры подключения к серверу','SELECT id, value, to_timestamp(clock), row_number()over(partition by id order by clock desc) as rn from table2') AS t2(id bigint, value numeric, clock timestamp) то возвращается: ERROR: remote query result rowtype does not match the specified FROM clause rowtype ... |
|||
:
Нравится:
Не нравится:
|
|||
24.06.2019, 16:07 |
|
Объединение двух таблиц
|
|||
---|---|---|---|
#18+
Guzya, Я в конечном итоге хотел обернуть этот запрос в create view. То есть на выходе мне нужна view. Делать представление на основе представления тоже можно, но у меня в голове это пока плохо умещается)) ... |
|||
:
Нравится:
Не нравится:
|
|||
24.06.2019, 16:11 |
|
Объединение двух таблиц
|
|||
---|---|---|---|
#18+
тут ещё добавь (выделил) neya1court, Да, добавил. Если выполнить отдельно: select t1.id, t1.object from table1 t1, dblink('параметры подключения к серверу','SELECT id, value, to_timestamp(clock), row_number()over(partition by id order by clock desc) as rn from table2') AS t2(id bigint, value numeric, clock timestamp , rn integer ) то возвращается: ERROR: remote query result rowtype does not match the specified FROM clause rowtype ... |
|||
:
Нравится:
Не нравится:
|
|||
24.06.2019, 16:12 |
|
|
start [/forum/topic.php?fid=53&msg=39829870&tid=1995148]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
42ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
50ms |
get tp. blocked users: |
1ms |
others: | 14ms |
total: | 149ms |
0 / 0 |