use*_*554 2 sql t-sql sql-server datetime date
我有下表:
用户
我正在尝试获取查询以获取可计费用户,标准是:
我有以下查询:
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月创建的人不应被视为可计费.
如何实现年份或优化我的查询?
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)
| 归档时间: |
|
| 查看次数: |
400 次 |
| 最近记录: |