我正在使用Reporting Services在SQL Server 2012中构建一个查询,该查询为我提供了一个成员列表,该成员在第一个时期使用了其帐户中的服务但在第二个时期没有在其帐户中使用服务。< / p>
我正在使用的表格是:
我已经构建了以下查询,该查询为我提供了在特定时间段内使用其帐户中的产品的成员列表,但我在过滤掉在第二期使用产品的人时遇到了问题。
成员表给了我memid的唯一成员标识符,SS给我一个memid链接的成员帐户服务表,SSUSED保存所用服务的历史记录,产品给我SS表上的产品和PRODUCTCATS是一个列出PRODUCTS表的产品类别的表。产品链接到带有产品的PRODUCTCATS,成员链接到带有memid的SS,SS链接到带有ssid的SSUSED。
SELECT
MEMBERS.memid
FROM
SS
INNER JOIN
SSUSED ON SS.ssid = SSUSED.ssid
INNER JOIN
MEMBERS ON SS.memid = MEMBERS.memid
INNER JOIN
PRODUCTS ON SS.productid = PRODUCTS.productid
INNER JOIN
PRODUCTCATS ON PRODUCTS.productcatid = PRODUCTCATS.productcatid
WHERE
(SSUSED.usedate BETWEEN @rvStartWeek1 AND @rvEndWeek1)
AND (PRODUCTS.productcatid IN (27, 28, 29, 58, 77, 75, 30, 61, 31, 32, 47, 68))
AND (MEMBERS.siteid = @rvSite)
答案 0 :(得分:1)
使用以下内容:
y <- c(1, 2, NA, NA, 5)
z <- c(NA, NA, 3, 4, 5)
coalesce(y, z)
[1] 1 2 3 4 5
答案 1 :(得分:0)
您可以为成员记录在period1和period2中出现的次数添加一个计数,然后检查。
data = {'a': [10,6,-3,-2,4,12,3,3], 'b': [6,-3,12,12,8,11,-5,-5], 'id': [1,1,1,1,2,2,2,2]}
df = pandas.DataFrame.from_dict(data)
grouper = df[df.b > 10].groupby(df.id)
filtered = list()
for group, group_data in grouper:
filtered.append(group_data.apply(min))
df_filtered = pandas.DataFrame.from_records(filtered)
# output
a b id
0 -3 12 1
1 12 11 2
答案 2 :(得分:0)
所以成员(MEMBERS
)和使用的服务(SSUSED
)是n:m相关的,你有一个桥表SS
。您可以通过此表加入成员和服务,并按成员汇总。计算两个时期的条目:
select m.memid
from members m
join ss on ss.memid = m.memid
join ssused s on s.ssid = ss.ssid
where m.siteid = @rvSite
and ss.productid in
(
select pc.productid
from productcats pc
where pc.productcatid in (27, 28, 29, 58, 77, 75, 30, 61, 31, 32, 47, 68)
)
group by m.memid
having count(case when s.usedate between @rvStartWeek1 and @rvEndWeek1 then 1 end) > 1
and count(case when s.usedate between @rvStartWeek2 and @rvEndWeek2 then 1 end) = 0;