Tôi đang cố gắng tham gia các bảng dựa trên các cột nhất định nằm trong phạm vi thời gian được chỉ định. Tôi đã thử một số phương pháp và không thể giải quyết vấn đề này.Netezza SQL để tham gia một bảng nếu bảng đó chứa dữ liệu có liên quan
Tôi bắt đầu với một truy vấn đơn giản:
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')
trả về 1 hàng.
Sau đó tôi thêm bảng khác:
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'))
trả về 4 dòng dựa trên 4 mục trong bảng mrd cho unitID đó. Nhưng không cái nào trong số này có liên quan đến ngày đó nên tôi không muốn thấy thông tin đó.
Vì vậy, tôi cố gắng này:
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)
nhưng điều này đưa ra một lỗi nói rằng họ hy vọng một "" trước khi 'mrd.unitid' ở dòng cuối cùng.
Vì vậy, tôi cũng đã cố gắng này:
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')
nhưng điều này không trả lại bất kỳ dòng.
Vì vậy, để rõ ràng, những gì tôi muốn từ truy vấn cụ thể này là 1 hàng có thông tin dựa trên c.calledofftime và không có thông tin được lấy từ bảng khác vì không có dữ liệu có liên quan dựa trên thời gian mrd.effective . Cảm ơn
Vì vậy, về cơ bản, bạn đang tìm cách tham gia 'mktdmtunit' với' mktmanualdispatch_all', cho đơn vị id 2756, trong đó thời gian được gọi là từ 12/5 lúc 5 giờ sáng và 12/6 lúc 5 giờ sáng, và thời gian hiệu quả của công văn cũng là giữa 12/5 lúc 5 giờ sáng và 12/6 lúc 5 giờ sáng? –
Vâng mktdmtunit là bảng "chính" nhưng nếu không bạn là chính xác. Tôi thực sự đã giải quyết điều này bằng cách làm cho sự tham gia bên trong trên bit cuối cùng của mã của tôi một bên ngoài tham gia bên ngoài. Nó sẽ không cho phép tôi đăng câu trả lời thực sự vì tôi mới ở đây. –
Bạn cần có đủ đặc quyền để có thể gửi câu trả lời cho câu hỏi của mình ngay bây giờ. – DMK