Выберите вопрос запроса - PullRequest
       1

Выберите вопрос запроса

1 голос
/ 21 сентября 2011

У меня есть следующие данные в таблице:

Date       ID             Start                   END        Duration_S     Duration_A
9/12/2011 22216 9/12/2011 12:30:00 PM   9/12/2011 2:15:00 PM    6300         NULL
9/12/2011 22216 9/12/2011 2:30:00 PM    9/12/2011 2:39:00 PM    540           NULL
9/12/2011 22216 9/12/2011 5:20:00 PM    9/12/2011 5:50:00 PM    1800           NULL

Моя цель - обновить столбец Duration_A, в настоящее время нулевой.

Информация, которую я использую для получения этой информации, представляет собой таблицу, структурированную так:

ID        Start_Time    State   End_Time       State_Duration
22216   6/3/10 2:07:58  1      6/3/10 2:20:58       800
22216   6/3/10 2:21:58  2      6/3/10 2:25:55       52
22216   6/3/10 5:21:58  2      6/3/10 5:31:05       600

Чтобы обновить Duration_A, я должен суммировать длительность, содержащую определенные состояния (это не проблема), но проблема в том, что Start_Time и End_Time должны соответствовать Start и End моей первой таблицы. Вот что я делаю:

SELECT     tblB.ID, SUM(tblB.StateDuration) AS Total, tblA.Start_Time, 
                      tblA.End_Time
FROM         
                      tblA INNER JOIN tblB ON tblB.Id = tblA.ID
                      tblB.Start_Time >= tblA.Start AND 
                      tblB.End_Time <= tblA.End

WHERE     STATE IN (1, 2, 3, 4, 5, 6, 7, 10, 11)
GROUP BY tblB.StateDuration, tblB.Id, tblA.Start_Time, 
                      tblA.End_Time,tblB.End_Time, 
                      tblB.Start_Time

Это дает мне первую продолжительность, когда время начала и окончания tblB совпадает с tblA, где я хочу получить сумму всех длительностей между этими временными рамками. Если мне не ясно, дайте мне знать.

1 Ответ

0 голосов
/ 21 сентября 2011

Насколько я понимаю, вам не нужно группировать по всем этим полям.Просто добавьте больше условий в предложение WHERE:

SELECT     tblB.ID, SUM(tblB.StateDuration) AS Total, tblA.Start_Time, 
                      tblA.End_Time
FROM         
                      tblA INNER JOIN tblB ON tblB.Id = tblA.ID
                      tblB.Start_Time >= tblA.Start AND 
                      tblB.End_Time <= tblA.End

WHERE     STATE IN (1, 2, 3, 4, 5, 6, 7, 10, 11) AND 
          tblA.Start_Time <= tblB.Start_Time AND 
          tblB.End_Time <= tblA.End_Time
GROUP BY tblB.id
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...