A表(会员表)
member_ID 会员卡号(主键)
B表(会员活动历史表)
RECORD_ID 记录编号(主键)
member_ID
ACTIVITY_DATE 活动日期以上是A、B两表的主要字段,现要查询3年内没有活动的会员,时间起点从当前年月日向前退三年,这两张表都很大,哪位高手能帮我写一个效率高的sql语句
member_ID 会员卡号(主键)
B表(会员活动历史表)
RECORD_ID 记录编号(主键)
member_ID
ACTIVITY_DATE 活动日期以上是A、B两表的主要字段,现要查询3年内没有活动的会员,时间起点从当前年月日向前退三年,这两张表都很大,哪位高手能帮我写一个效率高的sql语句
FROM B,A
WHERE
B.ACTIVITY_DATE <= add_months(sysdate,-3*12);
FROM A, B
WHERE A.MEMBER_ID = B.MEMBER_ID
AND MONTHS_BETWEEN(SYSDATE, B.ACTIVITY_DATE) >= 36;
看看这个怎么样.....
SELECT A.member_ID,B.RECORD_ID,B.ACTIVITY_DATE
FROM B,A
WHERE
A.member_ID=B.member_ID AND
B.ACTIVITY_DATE <= add_months(sysdate,-3*12);
FROM (SELECT B.MEMBER_ID
FROM B
WHERE B.ACTIVITY_DATE <= ADD_MONTHS(SYSDATE, -36)
GROUP BY B.MEMBER_ID) BB
LEFT JOIN A ON A.MEMBER_ID = BB.MEMBER_ID
2. 然后用下面的语句来实现:
SELECT a.member_id, b.record_id, b.activity_date
FROM b, a
WHERE a.member_id = b.member_id
AND b.activity_date <= add_months(SYSDATE, -3 * 12);
我想这样效率可能会高些。
where not exists(select 1
from b
where memberid=a.memberid
and actvity_date>add_months(sysdate,-36))