2015-10-09 2 views
0

Так что работа над проблемой здесь, где мне нужно получить суммируемую сумму времени из использования столбцов timestart и timestop из двух разных устройств. если строка1 началась и остановилась, тогда запустите и остановитесь, и начните и остановитесь, и все 3 раза есть перекрытие, тогда мне нужно взять самое первое время начала и самое последнее стоп-время и суммировать их. Картинки ниже моего иллюстрируют эту идею. Temp1 - это копия оригинала, но без каких-либо дополнительных деталей. Мне просто нужно сделать сумму в соответствии с линией 1 или Line2.суммирование перекрытия времени в sql-сервере 2008

Хорошо, поэтому, если мы обратим внимание на изображение с обведенными выше данными, то, что должно произойти, мне нужно взять общее время от 18: 10-18: 47, потому что оба 1061 и 1062 перекрывают друг друга. Таким образом, у меня будет еще два внутренних канала, соединенных в temp1, которые будут группировать данные по часам и другому столбцу, который покажет общее время, в течение которого линия была вниз.

это ссылка на http://sqlfiddle.com/#!3/e33ff/1

Я искал решение для этого, но либо решение в Oracle или люди использовали SQL-сервер 2014, чтобы сделать его проще с помощью аналитических функций, таких как Lead(), но я использую сервер 2008

В моей скрипте sql я добавил таблицу «результаты», которая даст вам представление о том, как выглядят результаты. Запись там соответствует pkid = 1065 и pkid = 1066. Пожалуйста, помогите или дайте подсказки о том, как справиться с этим.

Original Table

Sample of OVerlapping

Sample of Overlapping 2

+0

«Тогда мне нужно принять самое первое время начала и самую последнюю остановку и подвести итог» ... что вы подразумеваете под первым и последним? Это основано на ID? – Patrick

+0

Как вы хотите суммировать значения даты и времени? Можете ли вы дать ожидаемый результат? –

+2

Вы могли потратить несколько минут, чтобы написать надлежащее описание с примерными данными и ожидаемыми результатами, теперь довольно сложно понять, что вы на самом деле имеете в виду. Я предполагаю, что это какая-то проблема с пробелами и островами, где вы хотите объединить перекрывающиеся диапазоны в один, возможно, на один идентификатор. –

ответ

0

ли работать разметить через номер строки и выберите минимальное и максимальное время?

select 
    d.PkID, 
    Line, 
    d.dateentry, 
    TimeStart, 
    Timestop, 
    Min(TimeStart) over (partition by line) as TimeStartPartition, 
    Max(Timestop) over (partition by line) as TimestopPartition, 
    e.TimeL1, 
    f.TimeL2 
+0

Я боюсь, что этот запрос не использует никакой логики для идентификации перекрывающихся интервалов. –

Смежные вопросы