моя проблема заключается в следующем:SQL Server SUM DATEDIFF и NULL, если смотреть на записи между двумя датами
У меня есть таблица (называемая таблица) со столбцами: ID, событие, StartDate, ENDDATE
StartDate идет с 1900-01-01 по текущий день, enddate также. event - произвольная строка, и каждый идентификатор запускает и завершает несколько событий с течением времени (но только одно событие за раз).
Рассмотрите случай, когда мы хотим получить записи о датах между 1989-01-01 и 2000 годами -01-01 Мы хотим суммировать разницу между датами, чтобы получить общее количество недель, которые каждый идентификатор проводит, делая какое-либо событие.
Задача, которую я имею, заключается в том, что в данных, которые все еще находятся на каком-либо событии, меня интересует, поэтому их EndDate равна нулю.
в настоящее время я пытаюсь
SELECT
id,
ISNULL(enddate, 2000-01-01 sum(datediff(weeks, startdate, enddate)) AS wksdoingstuff
WHERE
event IN ('something', 'somethingelse'. 'anotherthing')
AND BETWEEN 1989-01-01 AND 2000-01-01
GROUP BY
id
То, что я после:
Я хочу строк различных идентификаторов и каждый из них будет иметь соответствующий счет того, сколько недель они были на мероприятиях, представляющих интерес
на данный момент мой код (не совсем то, что я написал там) дает мне несколько строк для каждого идентификатора, суммируя каждый раз, какой они были в любом случае.
Код, который вы показали нам даже не близко к возможности работать. Попробуйте создать самодостаточный пример ** runnable ** code (я бы предложил заполнить переменную таблицы несколькими строками данных, фактически запросив у нее предложение 'FROM', исправить все, что было, строка 'ISNULL' и т. д.) –
Кроме того, вам нужно дать нам четкое определение того, какой результат вы ищете. 'DATEDIFF' подсчитывает * переходы *, и если мы предположим, что вы имели в виду« неделя », а не« недели », вы должны знать, что он может вернуть 1 для двух дат, которые находятся всего на один день, если первый - суббота, а второй есть воскресенье. Это то поведение, которое вы хотите? Нужно ли учитывать * частичные * недели здесь? –
Да, частичное поведение отлично подходит для анализа, кроме того, я всегда могу сделать это днем, чтобы узнать, имеют ли данные смысл. Я знаю, что мой код как не запускается, я не на компьютере, чтобы получить доступ к серверу, и когда у меня нет доступа к Интернету, поэтому мне нужно писать заметки о ответе и применять Это. –