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