Как запретить SQL Join обрабатывать строку дважды

Позвольте мне начать с того, что я знаю, что моя тема не совсем верна, но я не знаю, как это сделать. сформулируй это.

Вместо того, чтобы пытаться объяснить, что я пытаюсь сделать, позвольте мне показать вам:

Ниже приведен фрагмент соответствующих данных из моей таблицы (я использую CONVERT, чтобы обрезать поля даты/времени до значений, которые нам нужны). , Все даты — «XX/XX/XXXX 00:00:00.000», а все времена — «01/01/1900 XX:XX:XX.000», где XX — истинное значение, а 00 — заполнитель).

CALLNBR     DATE       START      END
----------- ---------- ---------- ----------
0000182867  03/07/2012 10:55:00   12:20:00
0000182867  03/07/2012 12:20:00   13:00:00
0000182779  03/06/2012 14:29:00   15:03:00
0000182749  03/06/2012 15:15:00   15:30:00
0000182748  03/07/2012 10:40:00   12:30:00
0000182748  03/07/2012 12:30:00   13:20:00
0000182740  03/06/2012 11:00:00   11:30:00
0000182740  03/06/2012 11:30:00   12:00:00
0000182735  03/07/2012 09:10:00   10:00:00
0000182735  03/07/2012 10:00:00   10:40:00
0000182735  03/06/2012 14:40:00   15:10:00
0000182735  03/06/2012 15:10:00   15:30:00
0000182735  03/06/2012 15:30:00   16:45:00

Мне нужно связать времена вместе, где время окончания одной записи является временем начала следующей. Я пытаюсь получить результат, аналогичный (отфильтровано CALLNBR 182735):

CallNbr     DATE       t1Start    t1end      t2Start    t2end      t3Start    t3end
----------- ---------- ---------- ---------- ---------- ---------- ---------- ----------
0000182735  03/06/2012 14:40:00   15:10:00   15:10:00   15:30:00   15:30:00   16:45:00
0000182735  03/07/2012 09:10:00   10:00:00   10:00:00   10:40:00   NULL       NULL

Но результат, который я получаю:

CallNbr     DATE       t1Start    t1end      t2Start    t2end      t3Start    t3end
----------- ---------- ---------- ---------- ---------- ---------- ---------- ----------
0000182735  03/06/2012 14:40:00   15:10:00   15:10:00   15:30:00   15:30:00   16:45:00
0000182735  03/06/2012 15:10:00   15:30:00   15:30:00   16:45:00   NULL       NULL
0000182735  03/07/2012 09:10:00   10:00:00   10:00:00   10:40:00   NULL       NULL

Моя проблема связана со средней записью, значения которой находятся в первой возвращенной записи:

0000182735  03/06/2012 15:10:00   15:30:00   15:30:00   16:45:00   NULL       NULL

К сожалению, я не могу подавить NULLS с помощью t3Start или t3End, потому что это удалит запись для (в данном случае) 07.03.2012.

0000182735  03/07/2012 09:10:00   10:00:00   10:00:00   10:40:00   NULL       NULL

А теперь о SELECT (Чтобы сделать его более читабельным, я убрал свои CONVERT'еры):

    SELECT
      t1.CallNbr,
      t1.STRTDATE,
      t1.strttime as t1Start,
      t1.endtme   as t1end,
      t2.strttime as t2Start,
      t2.endtme   as t2end,
      t3.strttime as t3Start,
      t3.endtme as t3end
    FROM       TableA t1
    INNER JOIN TableA t2 ON t1.endtme    = t2.strttime
                        AND t1.strtdate  = t2.strtdate
                        AND t1.CALLNBR   = t2.CALLNBR
                        AND t1.LINITMTYP = 'L' 
    LEFT  JOIN TableA t3 ON t3.CALLNBR  = t2.CALLNBR
                        AND t3.strttime = t2.endtme
                        AND t3.strtdate = t1.strtdate
    WHERE t1.CALLNBR = '0000182735'
    ORDER BY t1.CALLNBR, t1.strtdate

Даже если вы не можете помочь, спасибо, что нашли время, чтобы прочитать его.

Спасибо,

Филипп

6
задан biziclop 19 March 2012 в 21:05
поделиться