Проблемы с данными SQL-запросов - PullRequest
0 голосов
/ 04 октября 2011

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

ID       Date                 interval  interval_date            tot_activity  non-activity
22190   2011-09-27 00:00:00     1000    2011-09-27 10:00:00.000     265           15

У меня есть другая таблица с этими данными:

Date                        ID             Start                END               sched_non_activity     non_activity
10/3/2011 12:00:00 AM   HBLV-22267  10/3/2011 2:02:00 PM    10/3/2011 2:11:00 PM    540          

Теперь, в поле non_activity второй таблицы, я бы хотел, чтобы это былозначение из первой таблицы.Однако мне нужно захватить tot_activity - non_activity, где интервалы (с шагом 15 минут) из первой таблицы попадают в тот же период времени, что и начало и конец второй таблицы.

У меня есть следующеедо сих пор:

SELECT     1.ID, 1.Date, 1.interval, 1.interval_date, 1.tot_activity, 1.non_activity,
            1.tot_activity - 1.non_activity AS non_activity
FROM         table1 AS 1 INNER JOIN
                      LIST AS L ON 1.ID = L.ID INNER JOIN
                      table2 AS 2 ON 1.Date = 2.Date AND L.ID = Right(2.ID,5) 
Where 1.interval_date >= 2.Start AND 1.interval_date < 2.End

ORDER BY 1.ID, 1.interval_date 

С этим, я уже вижу, что я не смогу захватить, если старт из таблицы 2 в 15:50, что означает, что мне нужно захватить интервал 15: 45.

есть ли способ сделать это с помощью запросов, или я должен использовать переменные, и делать проверку за интервал. Любая помощь будет принята с благодарностью.

Ответы [ 2 ]

1 голос
/ 05 октября 2011

Я думаю, вы слишком много просите из запроса здесь.

Что бы я сделал, это обработал две таблицы как списки, упорядоченные по меткам времени, и решил проблему программно (т.е. не одним запросом)

Например, создайте функцию, которая обходит первую таблицу с шагом 15 минут и находит лучшее совпадение во второй таблице (я предполагаю, что это то, что вы пытаетесь сделать). Реализуйте свою функцию, чтобы вернуть тот же набор результатов, что и ваш запрос выше, или сохранить его во временной таблице. Выберите из набора результатов. T-SQL твой друг:)

1 голос
/ 04 октября 2011

Мне трудно понять вашу проблему, но вам, возможно, повезет больше с функцией DATEDIFF:

DATEDIFF(SECOND, 1.interval_date, 2.Start) >= 0 AND DATEDIFF(SECOND, 1.interval_date, 2.End) <= 0

Я извиняюсь, если не уловил ваш дрейфЕсли я что-то упустил, не могли бы вы немного уточнить?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...