0

我的数据库中有下表

会员资格

  • 公司编号
  • 会员
  • 加入日期
  • 到期日
  • 重新加入日期
  • 离开日期

我正在使用以下查询返回 2011-01-31 的所有成员

select * from MEMBERSHIP 
where (JoinedDate < '2011-01-31' or RejoinDate  < '2011-01-31') and IsMember=1

我的问题是它与我经理的数据不符。难道我做错了什么?

4

4 回答 4

1

您不应该删除“IsMember = 1”语句,因为您想列出在 2011-01-31 之前是成员但不再是成员的用户吗?如果你想包含第 31 个,也许你应该使用 '<='。

还有什么是 RejoinDate 的默认值?如果它为空,则可能会对您的 WHERE 语句产生影响...

于 2012-05-25T14:52:32.177 回答
1

问题是 IsMember 目前是他们是否是会员,而不是他们是否是 2011-01-31 的会员。所以,您的查询实际上是在回答这个问题:“今天活跃的哪些成员在 2011 年 1 月 31 日之前加入或最后重新加入?”

例如,从 2011 年 1 月 30 日开始并在 2011 年 2 月 1 日退出的人在您的查询中不算作成员,但会在该日期成为成员。

最准确的答案是在事务表中查找成员资格,其中您在表中加入和退出。

除此之外,以下内容可能已经足够接近:

select *
from MEMBERSHIP
where '2011-01-31' between JoinedDate and LeaveDate
于 2012-05-25T14:58:07.313 回答
0

你可以使用这样的东西:

JoinedDate <= CONVERT(Date, '2011-01-31')
于 2012-05-25T14:51:34.387 回答
0

问题是您的日期被隐式视为2011-01-31 ( ) 的午夜'2011-01-31 00:00:00',因此不包括当天的任何活动。尝试< '2011-02-01'改为使用,以便包含 31 日的所有活动。

于 2012-05-25T14:48:02.350 回答