Search code examples
sqlsql-servert-sqlsql-server-2016

Including all of one value and filtering another


I would like to include all issues with every status, but include those with a status of 'Closed' only when the DateResolved is within the last 5 days. Include all of the other status values where DateResolved IS NULL.

Data:

IssueStatus DateResolved
Closed      7/25/2021
Closed      7/26/2021
Closed      7/1/2021
In Progress 
Deferred    
Deferred

This returns only IssueStatus = 'Closed' within last 5 days.

SELECT IssueStatus, DateResolved FROM TABLE
WHERE IssueStatus IN ('Closed','In Progress','Deferred')
AND DateResolved >= DATEADD(d, -5, CAST(GETDATE() AS DATE)) 

Desired results:

IssueStatus DateResolved
Closed      7/25/2021
Closed      7/26/2021
In Progress 
Deferred    
Deferred

Solution

  • If don't wish to explicitly list the IssueStatus's to include then you could try something like this

    SELECT IssueStatus, DateResolved 
    FROM [TABLE]
    WHERE (IssueStatus='Closed'
           AND DateResolved >= DATEADD(d, -5, CAST(GETDATE() AS DATE)))
          OR IssueStatus<>'Closed';