Próbuję połączyć tabele na podstawie pewnych kolumn znajdujących się w określonym przedziale czasu. Próbowałem kilku metod i nie byłem w stanie tego rozwiązać.Netezza SQL do przyłączenia się do tabeli, jeśli ta tabela zawiera istotne dane
rozpocząć w prosty zapytania:
SELECT *
FROM admin.mktdmtunit c
WHERE c.unitid IN ('2756')
AND c.calledofftime between to_timestamp('2012-12-05 05:00:01','yyyy-mm-dd hh:mi:ss')
AND to_timestamp('2012-12-06 05:00:00','yyyy-mm-dd hh:mi:ss')
która zwraca 1 wiersz.
Następnie dodać kolejną tabelę:
SELECT *
FROM admin.mktdmtunit c
INNER JOIN admin.mktmanualdispatch_all mrd
ON c.unitid = mrd.unitid
where c.unitid in ('2756')
AND (c.calledofftime between to_timestamp('2012-12-05 05:00:01','yyyy-mm-dd hh:mi:ss')
and to_timestamp('2012-12-06 05:00:00','yyyy-mm-dd hh:mi:ss')
OR mrd.effectivetime between to_timestamp('2012-12-05 05:00:01','yyyy-mm-dd hh:mi:ss')
and to_timestamp('2012-12-06 05:00:00','yyyy-mm-dd hh:mi:ss'))
która zwraca 4 linie na podstawie 4 wpisów w tabeli mrd dla tego unitid. Ale żadna z nich nie odnosi się do tej daty, więc nie chciałbym widzieć tych informacji.
Więc próbowałem to:
SELECT *
FROM admin.mktdmtunit c
where c.unitid in ('2756')
AND c.calledofftime between to_timestamp('2012-12-05 05:00:01','yyyy-mm-dd hh:mi:ss')
and to_timestamp('2012-12-06 05:00:00','yyyy-mm-dd hh:mi:ss')
OR (exists(SELECT mrd.effectivetime
FROM admin.mktmanualdispatch_all mrd
WHERE mrd.effectivetime between to_timestamp('2012-12-05 05:00:01','yyyy-mm-dd hh:mi:ss')
and to_timestamp('2012-12-06 05:00:00','yyyy-mm-dd hh:mi:ss')
AND c.unitid = mrd.unitid)
ale to daje błąd mówiąc, że spodziewa się „” przed «mrd.unitid» w ostatnim wierszu.
Więc ja też próbowałem to:
SELECT *
FROM admin.mktdmtunit c
INNER JOIN admin.mktmanualdispatch_all mrd
ON
mrd.effectivetime between to_timestamp('2012-12-05 05:00:01','yyyy-mm-dd hh:mi:ss')
and to_timestamp('2012-12-06 05:00:00','yyyy-mm-dd hh:mi:ss')
AND c.unitid = mrd.unitid
where c.unitid in ('2756')
AND c.calledofftime between to_timestamp('2012-12-05 05:00:01','yyyy-mm-dd hh:mi:ss')
and to_timestamp('2012-12-06 05:00:00','yyyy-mm-dd hh:mi:ss')
ale to nie zwraca żadnych wierszy.
Tak więc, aby było jasne, co chcę z tego konkretnego zapytania jest 1 wiersz, który ma informacje oparte na c.calledofftime i nie ma informacji wciągniętej z drugiej tabeli, ponieważ nie ma odpowiednich danych w oparciu o mrd.efektywny czas . Dzięki
Więc zasadniczo chcesz dołączyć do 'mktdmtunit' z' mktmanualdispatch_all', dla identyfikatora jednostki 2756, gdzie czas wywołania wynosi 12/5 o 5 rano i 12/6 o 5 rano, a czas skutecznej wysyłki to także 12/5 o 5 rano i 12/6 o 5 rano? –
Dobrze mktdmtunit jest tabelą "główną", ale poza tym masz rację. Naprawdę to rozwiązałem, tworząc wewnętrzny łącznik na ostatnim fragmencie kodu lewe sprzężenie zewnętrzne. Nie pozwolę sobie na ogłoszenie odpowiedzi, ponieważ jestem tu nowy. –
Powinieneś mieć wystarczająco dużo uprawnień, aby móc teraz przesłać odpowiedź na swoje pytanie. – DMK