我需要从22个客户数据库中检索客户MSISDN(电话号码)。我已经为两种情况创建了一个视图:
首先,我们需要检查哪些MSISDNs profile_id 16240处于非活动状态。这可以通过查询非活动数据不为空的数据库来完成。
由于GPRS我们有两个配置文件25054和16240,它发生在MSISDN 25054(用于互联网目的)是活动的和16240(用于GPRS不活动) 所以我们需要为此目的创建脚本。
我准备了一个查询:
CREATE VIEW SUBSCR_INFO_VIEW AS
SELECT subscr_no,account_no FROM CUSTOMER_PROFILE_DEF WHERE subscr_no NOT IN
(SELECT DISTINCT(subscr_no) FROM CUSTOMER_ID_EQUIP_MAP
WHERE inactive_date Is NOT NULL)
AND (profile_id IN (16240) AND cutoff_end_dt IS NOT NULL) OR (profile_id IN (25054) AND profile_id NOT IN (16240) AND cutoff_end_dt IS NULL)
SET ROWCOUNT 100
SELECT DISTINCT(subscr_no) FROM SUBSCR_INFO_VIEW
这将在所有22个客户服务器中受到影响,并且从单个客户获取数据需要2.5分钟。我想减少那个时间。请告诉我您的反馈意见。
答案 0 :(得分:0)
如果不了解有关数据库结构的更多信息,这有点难以回答。您在CUSTOMER_PROFILE_DEF和CUSTOMER_ID_EQUIP_MAP表中有多少条记录,以及您拥有哪些密钥?另外,你的SQL在原帖中很难理解,我在下面重新格式化并做了一些小改动:
CREATE VIEW
SUBSCR_INFO_VIEW
AS SELECT
subscr_no,
account_no
FROM
CUSTOMER_PROFILE_DEF
WHERE
subscr_no
NOT IN (
SELECT DISTINCT
subscr_no
FROM
CUSTOMER_ID_EQUIP_MAP
WHERE
inactive_date Is NOT NULL
)
AND ((profile_id = 16240 AND cutoff_end_dt IS NOT NULL)
OR (profile_id = 25054 AND cutoff_end_dt IS NULL))
SET ROWCOUNT 100 -- This is just for testing?
SELECT DISTINCT(subscr_no) FROM SUBSCR_INFO_VIEW
sql大致相同,但我将profile_id in (12345)
语句更改为profile_id = 12345
,因为值列表中只有一个值。