Позвольте мне начать с того, что я знаю, что моя тема не совсем верна, но я не знаю, как это сделать. сформулируй это.
Вместо того, чтобы пытаться объяснить, что я пытаюсь сделать, позвольте мне показать вам:
Ниже приведен фрагмент соответствующих данных из моей таблицы (я использую 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
Даже если вы не можете помочь, спасибо, что нашли время, чтобы прочитать его.
Спасибо,
Филипп