SQL Query根据日期和月份检索用户

use*_*554 2 sql t-sql sql-server datetime date

我有下表:

用户

  • 用户身份
  • CompanyID
  • 名称
  • 活跃
  • 加入日期
  • Date_Left

我正在尝试获取查询以获取可计费用户,标准是:

  • 加入结算月份的用户不会被视为可结算用户.
  • 在结算月份离开的用户可结算用户.

我有以下查询:

SELECT * from user u WHERE CompanyID = 1205
AND (p.IsActive = 1 AND MONTH(p.Date_Joined) != MONTH(GETDATE())
OR (p.is_active = 0 AND MONTH(p.Date_Left) = MONTH(GETDATE())
Run Code Online (Sandbox Code Playgroud)

问题是这个查询没有工作,因为它没有检查用户的年份(2017年9月加入的用户不被视为可计费,即使他们应该在2017年加入,而不是今年,这些人在2018年9月创建的人不应被视为可计费.

如何实现年份或优化我的查询?

Sal*_*n A 5

EOMONTH可用于确定一个月的最后一天.例如:

/* last day of prev month */ EOMONTH('2018-09-05', -1) = 2018-08-31
/* last day of curr month */ EOMONTH('2018-09-05')     = 2018-09-30
Run Code Online (Sandbox Code Playgroud)

您可以轻松检查活跃用户是否在上个月加入或当前月份的非活动用户离开,如下所示:

DECLARE @billdate AS DATE = '2018-09-05';

SELECT * 
FROM user
WHERE CompanyID = 1205 AND (
    (
        IsActive = 1 AND 
        Date_Joined <= EOMONTH(@billdate, -1)
    )
    OR
    (
        IsActive = 0 AND 
        Date_Left >  EOMONTH(@billdate, -1) AND
        Date_Left <= EOMONTH(@billdate)
    )
)
Run Code Online (Sandbox Code Playgroud)