Я переформатировал ваш запрос, чтобы он поместился на странице без прокрутки.
Надеюсь, это обеспечит то, что вам нужно.Он использует DATENAME
для получения частей месяца и года от текущей даты и DATEPART
для расчета "три месяца назад".Обратите внимание, что DATEPART
не ведет себя так, как вы могли бы ожидать - он подсчитывает количество границ конца периода (в данном случае месяцев) - следовательно, условие
...WHERE DATEDIFF(month,SafetySuggestionsLog.submittedDate,getdate()) < 3
, потому что последние три месяца имеют дваконец месяца между ними.
Я также добавил предложение ORDER BY
.
SELECT dbo.SafetySuggestionsLog.Title,
dbo.SafetySuggestionsLog.Description,
dbo.SafetySuggestionsType.Type,
dbo.SafetySuggestionsLog.Username,
dbo.employee.Name,
dbo.Divisions.DivisionShortcut,
left(datename(month,SafetySuggestionsLog.submittedDate),3)
+ '-'
+ datename(year,SafetySuggestionsLog.submittedDate) AS SubmittedMonth
FROM dbo.Divisions
INNER JOIN dbo.employee
ON dbo.Divisions.SapCode = dbo.employee.DivisionCode
INNER JOIN dbo.SafetySuggestionsLog
ON dbo.employee.Username = dbo.SafetySuggestionsLog.Username
INNER JOIN dbo.SafetySuggestionsType
ON dbo.SafetySuggestionsLog.TypeID = dbo.SafetySuggestionsType.ID
WHERE DATEDIFF(month,SafetySuggestionsLog.submittedDate,getdate()) < 3
ORDER BY SafetySuggestionsLog.submittedDate DESC
Также стоит отметить, что вам не нужно полностью указывать имя всех столбцов в запросе - этодопустимый SQL для псевдонима входных таблиц, например, так:
...INNER JOIN dbo.SafetySuggestionsLog AS log
Затем вы можете ссылаться на имена столбцов по псевдонимам в запросе - например,
log.Username
вместо
dbo.SafetySuggestionsLog.Username
, что облегчает чтение.