T-SQL - предложение WHERE для поиска входит, где дата на следующей неделе, но также в текущем квартале - PullRequest
0 голосов
/ 08 ноября 2018

У меня есть простая структура таблиц, содержащая задачи, назначенные ресурсам:

| TASK | START_DATE | RESOURCE | CLOSED |

| T1 | 2018-10-10 00:00:00.000 | Bill | 0 |

| T2 | 2018-11-12 00:00:00.000 | Bob | 0 |

| T3 | 2018-11-17 00:00:00.000 | Ben | 0 |

У меня есть отчет, предназначенный для отображения задач, которые необходимо выполнить на следующей неделе, и мой текущий фильтр:

WHERE CLOSED = 0 AND ((DATEPART(wk,Tasks.Start_Date) -1) = DATEPART(wk,getutcdate()) and DATEPART(YY,Tasks.Start_Date) = DATEPART(yy,getutcdate()))

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

Есть ли способ создать фильтр, включающий все задачи на этот квартал, а также задачи на следующую неделю? Например, задание, обозначенное как T1, все еще открыто, несмотря на то, что в прошлом у него была дата начала (2018-10-10 00: 00: 00.000), мне все еще нужно, чтобы оно отображалось в моем отчете.

Спасибо!

Ответы [ 2 ]

0 голосов
/ 08 ноября 2018

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

WHERE CLOSED = 0 
  AND Tasks.Start_Date < DATEADD(WEEK,1,GETDATE())

РЕДАКТИРОВАТЬ: Если требуется получить задачи, начнется на следующей неделе и начнется втолько за этот квартал, поскольку в приведенном выше предложении where приведены все задачи, которые уже запущены и имеют CLOSED = 0, используйте ниже:

WHERE CLOSED = 0 
  AND Tasks.Start_Date < DATEADD(WEEK,1,GETDATE())
  AND YEAR(Tasks.Start_Date) = YEAR(GETDATE())
  AND DATEPART(QUARTER, Tasks.Start_Date)=DATEPART(QUARTER, GETDATE())
0 голосов
/ 08 ноября 2018

Так что если закрыт = 0 и это в прошлом?Вы можете сделать оператор ИЛИ:

WHERE CLOSED = 0 
AND (
    ((DATEPART(wk,Tasks.Start_Date) -1) = DATEPART(wk,getutcdate()) and DATEPART(YY,Tasks.Start_Date) = DATEPART(yy,getutcdate()))
    OR
    Tasks.Start_Date <= GetDate()  -- if using MS SQL
)

Это вернет все, чем вы уже были, но также и там, где закрыто = 0 и StartDate уже в прошлом.

...