Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / сравнение двух таблиц / 13 сообщений из 13, страница 1 из 1
24.10.2005, 18:02
    #33341088
puzzle
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сравнение двух таблиц
Здравствуйте,
есть ДВЕ таблице структуры похожие:
Табл1: датастамп1, поле1.
Табл2: датастамп2, поле2.
Необходимо:
или вывести различия в поле 1 по дате
или вывести что типа токаго:
Код: plaintext
1.
2.
3.
4.
5.
датастам1 | поле1 | поле2  (если поле1=поле2) 
датастам1 | поле1 | _____  (если в табл2 нет записи по данной дате)   
датастам2 | _____ | поле2
...
датастам1 | поле1 | поле2
         |______ | поле2 (если по одной дате два значения)

Заранее благодарен, Павел.
...
Рейтинг: 0 / 0
24.10.2005, 18:43
    #33341185
Funny_Falcon
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сравнение двух таблиц
XM, где ты?
А то меня снова тянет в сохраненки на питоне :-)
Вообще FULL JOIN -ом пахнет. Только с "|______ | поле2 (если по одной дате два значения) " загвоздка.
Может приведете пример с данными в таблицах и в результате гипотетического запроса, а то не совсем понятно (мне).
...
Рейтинг: 0 / 0
25.10.2005, 10:52
    #33341901
puzzle
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сравнение двух таблиц
Код: plaintext
1.
2.
3.
4.
5.
6.
             Т1   Т2
 12 . 02 . 2005    Д     1 
 12 , 02 , 2005    _     2 
 14 , 02 , 2005    Д    _
 15 , 02 , 2005    _     2 
 16 , 02 , 2005    Д    _
 16 , 02 , 2005    О    _

что-то типа того.
Заранее благодарен.
...
Рейтинг: 0 / 0
25.10.2005, 12:23
    #33342170
puzzle
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сравнение двух таблиц
пробую что-то типа такого, только нет пустых значений:
Код: plaintext
1.
2.
3.
4.
  SELECT 
   s.date , s.signal,  hs."SIGNAL"
  FROM 
   "NT_Signal" s full join "NT_hist_sig" hs on (date(s.date) = date(hs."TTS"))
...
Рейтинг: 0 / 0
25.10.2005, 12:41
    #33342230
Funny_Falcon
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сравнение двух таблиц
Если не боишься сохраненок на перле/питоне (притормаживают), могу наваять.
(Что-то на подобие " интересная задачка ")
...
Рейтинг: 0 / 0
25.10.2005, 13:05
    #33342340
LeXa NalBat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сравнение двух таблиц
Приведите пожалуйста 1) create table, 2) insert показательного набора данных, и 3) что должен возвращать select для этих данных.
...
Рейтинг: 0 / 0
25.10.2005, 13:48
    #33342515
domanix
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сравнение двух таблиц
Может так?

create table t1 ( id integer ,f text);
create table t2 ( id integer ,f text);

insert into t1 VALUES(1,'1T1');
insert into t1 VALUES(2,'2T1');
insert into t1 VALUES(3,'3T1');
insert into t1 VALUES(4,'4T1');
insert into t1 VALUES(5,'5T1');

insert into t2 VALUES(1,'1T2');
insert into t2 VALUES(2,'2T2');
insert into t2 VALUES(6,'6T2');
insert into t2 VALUES(5,'5T2');

select t1.id,t1.f,t2.f from t1 left join t2 using(id)
union
select t2.id,t1.f,t2.f from t2 left join t1 using(id)

в результате:

id f f_1
---------------
1 1T1 1T2
2 2T1 2T2
3 3T1 Null
4 4T1 Null
5 5T1 5T2
6 Null 6T2
...
Рейтинг: 0 / 0
25.10.2005, 13:50
    #33342518
puzzle
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сравнение двух таблиц
Задача стоит в сравнении и выявлении различия между двух таблиц.
Код: plaintext
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.
CREATE TABLE "public"."hist_sig" (
  "RECID" SERIAL, 
  "TTS" TIMESTAMP , 
  "PRICE" DOUBLE PRECISION, 
  "SIGNAL" VARCHAR( 2 ), 
) WITH OIDS;

CREATE TABLE "public"."Signal" (
  "ID_Signal" BIGSERIAL, 
  "date" TIMESTAMP WITHOUT TIME ZONE, 
  "price" DOUBLE PRECISION, 
  "signal" VARCHAR( 2 )
) WITH OIDS;

insert into "Signal" ("date", "price","signal")
VALUES ('20050302 12:00:00',  12 . 5 , L)
insert into "Signal" ("date", "price","signal")
VALUES ('20050302 12:00:00',  12 . 5 , S)
insert into "Signal" ("date", "price","signal")
VALUES ('20050303 12:00:00',  12 . 5 , S)
insert into "Signal" ("date", "price","signal")
VALUES ('20050305 12:00:00',  12 . 5 , H)

insert into "hist_sig" ("TTS", "price","signal")
VALUES ('20050302 12:00:00',  12 . 5 , L)
insert into "hist_sig" ("TTS", "price","signal")
VALUES ('20050304 12:00:00',  12 . 5 , D)
insert into "hist_sig" ("TTS", "price","signal")
VALUES ('20050304 12:00:00',  12 . 5 , R)
Что хотелось бы в идеале получить (Т.Е. соответствие по дате(возможно до минут) и по сигналам):
Код: plaintext
1.
2.
3.
4.
5.
6.
----------из signal--------     -----из hist_sig-----------
'20050302 12:00:00',  12 . 5 , L,  12 . 5 , '20050302 12:00:00'
'20050302 12:00:00',  12 . 5 , S, ___, _________________
'20050303 12:00:00',  12 . 5 , S, ___, _________________
___________________, ____, D,  12 . 5 , '20050304 12:00:00'
___________________, ____, R,  12 . 5 , '20050304 12:00:00'
'20050305 12:00:00',  12 . 5 , H, ___, _________________
Допер до join получается но не то (не получается пустых полей справа):
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
  SELECT  s.date , s.signal, hs."TTS", hs."SIGNAL"
  FROM
  (  SELECT  s.date , s.signal
  FROM "NT_Signal" s
  WHERE  s."ID_TS" =  61 ) as s 
 LEFT JOIN 
 ( SELECT hs."TTS",hs."SIGNAL"   
   FROM "NT_hist_sig" hs) as hs 
  on date(s.date) = date(hs."TTS")
...
Рейтинг: 0 / 0
25.10.2005, 14:07
    #33342587
XM
XM
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сравнение двух таблиц
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
select date(s."date"), s."signal", s."price",
        date(hs."TTS"),  hs."SIGNAL", hs."PRICE"
from "Signal" s
	FULL OUTER JOIN
      "hist_sig" hs
  on ( date(s."date") = date(hs."TTS") and hs."SIGNAL" = s."signal" )
order by  1 ;

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
     date    | signal | price |    date    | SIGNAL | PRICE
------------+--------+-------+------------+--------+-------
   2005 - 03 - 02  | L      |   12 . 5  |  2005 - 03 - 02  | L      |   12 . 5 
   2005 - 03 - 02  | S      |   12 . 5  |            |        |
   2005 - 03 - 03  | S      |   12 . 5  |            |        |
   2005 - 03 - 05  | H      |   12 . 5  |            |        |
             |        |       |  2005 - 03 - 04  | D      |   12 . 5 
             |        |       |  2005 - 03 - 04  | R      |   12 . 5 
???
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
25.10.2005, 14:30
    #33342693
puzzle
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сравнение двух таблиц
всем огромное спасибо получилось!)))))))
Код: plaintext
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.
SELECT
  s.date , s.signal,s.price, hs."TTS", hs.SIG, hs."PRICE"
FROM
  (SELECT  s.date , s.signal,s.price
  FROM "NT_Signal" s
  WHERE  s."ID_TS" =  61 ) as s
LEFT JOIN
  (SELECT hs."TTS",
    CASE
      WHEN hs."SIGNAL" =  1  THEN 'L'
      WHEN hs."SIGNAL" =  10  THEN 'SL'
      WHEN hs."SIGNAL" =  102  THEN 'SL-S'
      WHEN hs."SIGNAL" =  2  THEN 'S'
      WHEN hs."SIGNAL" =  20  THEN 'SS'
      WHEN hs."SIGNAL" =  201  THEN 'SS-L'
      ELSE 'OTHER'
    END as SIG,
    hs."PRICE"
  FROM "NT_hist_sig" hs
  WHERE
    hs."SIGNAL" <>  0 
    and hs."ID_TS"= 43  and "ID_PROG" =  46 ) as hs
  ON date(s.date) = date(hs."TTS")
UNION
SELECT
  s.date , s.signal,s.price, hs."TTS", hs.SIG,hs."PRICE"
FROM
  (SELECT hs."TTS",
     CASE
       WHEN hs."SIGNAL" =  1  THEN 'L'
       WHEN hs."SIGNAL" =  10  THEN 'SL'
       WHEN hs."SIGNAL" =  102  THEN 'SL-S'
       WHEN hs."SIGNAL" =  2  THEN 'S'
       WHEN hs."SIGNAL" =  20  THEN 'SS'
       WHEN hs."SIGNAL" =  201  THEN 'SS-L'
       ELSE 'OTHER'
     END as SIG,
     hs."PRICE"
  FROM "NT_hist_sig" hs
  WHERE
    hs."SIGNAL" <>  0 
    and hs."ID_TS"= 43  and "ID_PROG" =  46 ) as hs
   LEFT JOIN
  (SELECT  s.date , s.signal, s.price
  FROM "NT_Signal" s
  WHERE  s."ID_TS" =  61 ) as s
   on  date(hs."TTS") = date(s.date)
...
Рейтинг: 0 / 0
25.10.2005, 14:37
    #33342718
XM
XM
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сравнение двух таблиц
Код: plaintext
1.
2.
3.
4.
5.
  SELECT ....
   FROM A LEFT JOIN B on (...)
  UNION
  SELECT ....
   FROM B LEFT JOIN A on (...)
эквивалентно
Код: plaintext
 SELECT ....  FROM A FULL JOIN B on (...)

Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
25.10.2005, 14:44
    #33342745
domanix
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сравнение двух таблиц
>SELECT ....
FROM A LEFT JOIN B on (...)
UNION
SELECT ....
FROM B LEFT JOIN A on (...)
>эквивалентно

> SELECT .... FROM A FULL JOIN B on (...)

Не совсем.
В этом случае вернутся набор имеющий все поля
т.е. для каждой таблице в обьединении будет свой набор полей.

в первом случае есть возможность обьединить данные из различных таблиц под одним полем...
...
Рейтинг: 0 / 0
25.10.2005, 14:58
    #33342791
puzzle
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сравнение двух таблиц
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
select date(s."date"), s."signal", s."price",
        date(hs."TTS"),  hs.SIG, hs."PRICE"
from (SELECT  s.date , s.signal, s.price
  FROM "NT_Signal" s
  WHERE  s."ID_TS" =  61 ) as s
	FULL OUTER JOIN
      (SELECT hs."TTS",
     CASE
       WHEN hs."SIGNAL" =  1  THEN 'L'
       WHEN hs."SIGNAL" =  10  THEN 'SL'
       WHEN hs."SIGNAL" =  102  THEN 'SL-S'
       WHEN hs."SIGNAL" =  2  THEN 'S'
       WHEN hs."SIGNAL" =  20  THEN 'SS'
       WHEN hs."SIGNAL" =  201  THEN 'SS-L'
       ELSE 'OTHER'
     END as SIG,
     hs."PRICE"
  FROM "NT_hist_sig" hs
  WHERE
    hs."SIGNAL" <>  0 
    and hs."ID_TS"= 43  and "ID_PROG" =  46 ) as hs
  on ( date(s."date") = date(hs."TTS") and hs.SIG = s."signal" )
order by  1 ,  4 ;
Результат такой же что и от того большого, ))))
спасибо, но вот еще вопросик, есть ли возможность как- то представить hs."SIGNAL" = 201 THEN 'SS-L' и hs."SIGNAL" = 102 THEN 'SL-S' (для сравнения) в виде двух сигналов,т.к. в другой табл есть сигналы только 4-х типов.
...
Рейтинг: 0 / 0
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / сравнение двух таблиц / 13 сообщений из 13, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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