首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL Server查询:每日数据快照比较(计算增量发生次数)

SQL Server查询:每日数据快照比较(计算增量发生次数)
EN

Stack Overflow用户
提问于 2014-04-02 22:47:48
回答 2查看 1.2K关注 0票数 1

我正在努力计算客户订阅(“套餐”)的变化。为此,我每天从包表中选择一次所有数据。我将每日查询结果称为“快照”(大约500k行)。然后,我将快照数据加载到一个新表中。10天后,我的快照表中总共有500万行(500k行×10天)。大多数客户不会更改套餐(65%)。我需要报告剩余35%的客户中,哪些客户正在更换软件包,他们何时更换软件包,他们正在进行哪些软件包更改(从"package X“到"package y"),以及哪些客户最频繁地更换软件包。

我编写的查询使用了self-join。我正在识别更改,但我的结果包含重复的行。

这是我的问题:

代码语言:javascript
复制
select *
 from UserPackageDump UPD1, UserPackageDump UPD2
 where UPD1.user_id = UPD2.user_id
 and UPD1.package_id <> UPD2.package_id

如何将此查询更改为仅生成不同的结果?

EN

回答 2

Stack Overflow用户

发布于 2014-04-02 23:04:07

代码语言:javascript
复制
SELECT 
  DISTINCT *
FROM 
  UserPackageDump UPD1 
JOIN UserPackageDump UPD2
  ON UPD1.user_id = UPD2.user_id
WHERE 
  UPD1.package_id <> UPD2.package_id
票数 0
EN

Stack Overflow用户

发布于 2014-05-18 07:35:06

但是,要返回到该方法,应该不需要对所有数据进行完整拷贝。要实现更高效的数据存储,您还有很多其他选择,其中一些是:

仅复制LastUpdated比上次复制时更新的那些行。假设对表的唯一更改是更改package_id,那么现在表中只有那些拥有changed.

  • Create UserPackageHistory表的用户的行,每次用户订阅包时,都会将行写入到该表中,同时更新UserPackage。

然后,对于这些数据集中的任何一个,为了满足报告要求,您可以填充一个多维数据集。您的源将是一组包含user_id、old_package_id、new_package_id和date的行。您将创建一个包含以下度量值的度量值组:

然后,此度量值组可以与以下维度相关:

switching

  • Switch类型日期,因此您可以看到

  • 用户何时发生切换,这样您就可以深入查看who is

  • ,这是通过从源数据中选择old_package_id和new_package_id构建的维。这让你能够看到特定班次的受欢迎程度。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22815117

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档