MS Access DateDiff Неоднозначные даты (день / месяц) Возвращение плохих результатов - PullRequest
0 голосов
/ 26 февраля 2019
tblDurations
  TaskID : Number
  Assigned Date : Date/Time
  Start Date : Date/Time
  End Date : Date/Time

SELECT TaskID,
  Count(TaskID) As [Task Count],
  Min(Nz([Start Date], [Assigned Date])) as [Min of Start Date],
  Max([End Date]) as [Max of End Date],
  DateDiff("d", Min(Nz([Start Date], [Assigned Date])), Max([End Date])) + 1 as [Date Range]
  FROM tblDurations
  GROUP BY TaskID

Вывод:

TaskID  Task Count Min of Start Date Max of End Date Date Range
1       3          16/08/2018        10/01/2019      1
2       2           4/09/2017        07/09/2017      4
3       3          13/09/2017        08/01/2018      118

Я получаю случайную строку, как показано в строке 1 (TaskID = 1), которая должна равняться 148!

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

Я нахожусь в Австралии, где дата даты составляет дд / мм / гггг.Однако я полагаю, что функция datediff запутывает порядок дня и месяца и возвращает ноль (плюс мой 1 = 1).

Как мне решить эту проблему?

1 Ответ

0 голосов
/ 26 февраля 2019

Проблема была не в двусмысленных датах.Посмотрев поближе, я обнаружил, что различные не двусмысленные даты возвращают неверные значения.

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

Мин (NZ ([Дата начала], [Назначенная дата]))

То, что я имел в виду, берут минимальную из любой начальной даты, но если начальная дата имеет значение NULL, то минимальная назначенная дата.

Что работаетэто:

Nz (Мин. ([Дата начала], Мин. (назначенная дата))

Все исправлено.

Возникает вопрос. Почему только иногда? Как это былоне связано с тем, что начальные даты имеют значение NULL или не NULL.

Спасибо всем за обратную связь!

...