SQL (доступ) Где дата находится в пределах 6 месяцев от другого поля даты - PullRequest
0 голосов
/ 04 октября 2018

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

У меня есть Table1.Service_Date и Table2.Service_Date

Я пытаюсь создать оператор where, включающий Table2.Service_Date, если это происходит за 6 месяцев или менее до Table1.Service_date.

Ответы [ 2 ]

0 голосов
/ 05 октября 2018

Это будет:

Where Table2.Service_Date <= DateAdd("m", -6, Table1.Service_Date)

или:

Where DateAdd("m", 6, Table2.Service_Date) <= Table1.Service_Date

Что выбрать, зависит от того, как обрабатывать даты ультимо - 28, 29,30 и 31.

Если ни один из них не подходит, используйте эту функцию:

Public Function DateAddMonth( _
  ByVal datDate As Date, _
  Optional ByVal intIncrement As Integer = 1, _
  Optional ByVal booLeapYearIgnore As Boolean = True) _
  As Date

' Add intIncrement number of months to datDate.
' If datDate is ultimo, return date will also be ultimo.
'
' 1999-10-21, Gustav Brock, Cactus Data ApS, Copenhagen

  Dim datDateNext As Date
  Dim booUltimo As Boolean

  ' No specific error handling.
  On Error Resume Next

  ' Add one day.
  datDateNext = DateAdd("d", 1, datDate)
  ' If datDate is ultimo, next day will be the first of the next month.
  booUltimo = (Day(datDateNext) = 1)

  If (Not booUltimo) And booLeapYearIgnore Then
    ' Regard February 28 as ultimo also for leap years.
    If (Month(datDate) = 2) And (Day(datDate) = 28) Then
      ' Add one more day.
      datDateNext = DateAdd("d", 1, datDateNext)
      booUltimo = True
    End If
  End If

  If booUltimo Then
    ' Add intIncrement number of months to the first of next month.
    datDateNext = DateAdd("m", intIncrement, datDateNext)
    ' Decrement one day.
    ' As datDate is ultimo, the month will be decremented too.
    datDateNext = DateAdd("d", -1, datDateNext)
  Else
    ' Add intIncrement number of months to datDate.
    datDateNext = DateAdd("m", intIncrement, datDate)
  End If

  DateAddMonth = datDateNext

End Function

и любую из них:

Where Table2.Service_Date <= DateAddMonth(Table1.Service_Date, -6)

Where DateAddMonth(Table2.Service_Date, 6) <= Table1.Service_Date
0 голосов
/ 04 октября 2018

Что вы можете сделать, это оператор inner join , чтобы связать данные, которые соответствуют вашему диапазону.

SELECT *
    FROM Table1 t1
    INNER JOIN on Table2 t2 ON ((DATEADD(t1.Service_Date, -6, MONTH) <= t2.Service_Date)
                                AND (t1.Service_Date >= t2.Service_Date))
    -- any WHERE statement to filter the dates    
;

У вас могут быть разные потребности в <= или >= условия, поэтому адаптируйте решение под свои нужды.

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