我的数据库中有下表
会员资格
- 公司编号
- 会员
- 加入日期
- 到期日
- 重新加入日期
- 离开日期
我正在使用以下查询返回 2011-01-31 的所有成员
select * from MEMBERSHIP
where (JoinedDate < '2011-01-31' or RejoinDate < '2011-01-31') and IsMember=1
我的问题是它与我经理的数据不符。难道我做错了什么?
我的数据库中有下表
会员资格
我正在使用以下查询返回 2011-01-31 的所有成员
select * from MEMBERSHIP
where (JoinedDate < '2011-01-31' or RejoinDate < '2011-01-31') and IsMember=1
我的问题是它与我经理的数据不符。难道我做错了什么?
您不应该删除“IsMember = 1”语句,因为您想列出在 2011-01-31 之前是成员但不再是成员的用户吗?如果你想包含第 31 个,也许你应该使用 '<='。
还有什么是 RejoinDate 的默认值?如果它为空,则可能会对您的 WHERE 语句产生影响...
问题是 IsMember 目前是他们是否是会员,而不是他们是否是 2011-01-31 的会员。所以,您的查询实际上是在回答这个问题:“今天活跃的哪些成员在 2011 年 1 月 31 日之前加入或最后重新加入?”
例如,从 2011 年 1 月 30 日开始并在 2011 年 2 月 1 日退出的人在您的查询中不算作成员,但会在该日期成为成员。
最准确的答案是在事务表中查找成员资格,其中您在表中加入和退出。
除此之外,以下内容可能已经足够接近:
select *
from MEMBERSHIP
where '2011-01-31' between JoinedDate and LeaveDate
你可以使用这样的东西:
JoinedDate <= CONVERT(Date, '2011-01-31')
问题是您的日期被隐式视为2011-01-31 ( ) 的午夜'2011-01-31 00:00:00'
,因此不包括当天的任何活动。尝试< '2011-02-01'
改为使用,以便包含 31 日的所有活动。