SQL Query Subtract 1 month

Jayson picture Jayson · Jun 20, 2016 · Viewed 13k times · Source

I need to query SQL for data that falls into a last month date. I thought I was using the correct query logic but I get no results and I know there are results. The snippet of code is this:

MONTH(n.JOIN_DATE) = DATEADD(month, - 1, GETDATE())

This is giving me no results and I need to get anyone who has a join date of last month. What am I missing?

Answer

Tim Biegeleisen picture Tim Biegeleisen · Jun 20, 2016

Use this:

MONTH(n.JOIN_DATE) = MONTH(DATEADD(month, - 1, GETDATE()))

You need to compare apples with apples, so compare the numerical month on both sides of the equation.

Massive credit to @PaulL for figuring this out before I did.

Update:

As @DasBlinkenLight and Matt pointed out, just comparing by month leaves the door open for multiple years to be returned. One possible fix would be to also compare the years, e.g.

WHERE MONTH(n.JOIN_DATE) = MONTH(DATEADD(month, - 1, GETDATE())) AND
      YEAR(n.JOIN_DATE) = YEAR(DATEADD(month, - 1, GETDATE()))