我正在努力计算客户订阅(“套餐”)的变化。为此,我每天从包表中选择一次所有数据。我将每日查询结果称为“快照”(大约500k行)。然后,我将快照数据加载到一个新表中。10天后,我的快照表中总共有500万行(500k行×10天)。大多数客户不会更改套餐(65%)。我需要报告剩余35%的客户中,哪些客户正在更换软件包,他们何时更换软件包,他们正在进行哪些软件包更改(从"package X“到"package y"),以及哪些客户最频繁地更换软件包。
我编写的查询使用了self-join。我正在识别更改,但我的结果包含重复的行。
这是我的问题:
select *
from UserPackageDump UPD1, UserPackageDump UPD2
where UPD1.user_id = UPD2.user_id
and UPD1.package_id <> UPD2.package_id如何将此查询更改为仅生成不同的结果?
发布于 2014-04-02 23:04:07
SELECT
DISTINCT *
FROM
UserPackageDump UPD1
JOIN UserPackageDump UPD2
ON UPD1.user_id = UPD2.user_id
WHERE
UPD1.package_id <> UPD2.package_id发布于 2014-05-18 07:35:06
但是,要返回到该方法,应该不需要对所有数据进行完整拷贝。要实现更高效的数据存储,您还有很多其他选择,其中一些是:
仅复制LastUpdated比上次复制时更新的那些行。假设对表的唯一更改是更改package_id,那么现在表中只有那些拥有changed.
然后,对于这些数据集中的任何一个,为了满足报告要求,您可以填充一个多维数据集。您的源将是一组包含user_id、old_package_id、new_package_id和date的行。您将创建一个包含以下度量值的度量值组:
然后,此度量值组可以与以下维度相关:
switching
https://stackoverflow.com/questions/22815117
复制相似问题