sql - 使用 SQL Server 或 Vertica 将按日期范围的记录转换为按日/月的记录

标签 sql sql-server tsql tableau-api vertica

我可以使用 SQL Server 或 Vertica 作为数据库,使用 Tableau 作为报告工具。使用任何这些媒介的解决方案都会有所帮助。

数据资源: 我有一个包含 100 条记录的表 (userActivity),其结构为:User、StartDate、EndDate

需要: 我有兴趣按日和按月准备显示“总活跃天数”的报告,这意味着如果 User1 的范围为“20180101”到“20180331”,他们将在 1 月、2 月和 3 月或 31 日每天贡献一天,如果按月汇总,则为 28 和 31 天。

目标: 我最终将汇总所有用户的总活跃天数作为输出,以实现每天/每月的单一总计。

此报告将永久有效,因此我更喜欢不按日/月对 CASE/IF-THEN 语句进行硬编码的解决方案。

谢谢!

最佳答案

虽然递归 CTE 是这种情况的良好候选者,但它可以单独使用 tableau 来处理。假设您有这些数据,以下是生成 View 所需的步骤。

enter image description here

  1. 创建一份包含所有预期日期的引用表。即使您需要覆盖从 01/01/2018 到 01/01/2043 的 25 年,这仍然少于 10k 行。

enter image description here

您需要两列具有完全相同的日期,因为 Tableau 不允许同一列上存在多个联接条件。

  • 使用以下条件在引用日历和数据之间创建内部联接。 enter image description here

  • 构建 View

    enter image description here

  • 关于sql - 使用 SQL Server 或 Vertica 将按日期范围的记录转换为按日/月的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53326856/

    相关文章:

    python - 在 Python ODBC 中使用 Microsoft Access SQL 运算符

    sql - 在 Postgresql 中,如何从一列中有 M 个不同值的表中获取未知的记录数?

    php - 连接两个表以显示数据

    sql - 如何根据事件的日期、时间和持续时间检查 SQL 表中的平均并发事件?

    mysql - SQL查询修正

    sql - 带子查询的 LEFT JOIN 和访问 select 子句中的主表列

    sql server 2000将datetime转换为hhmm

    sql - 使用 XQuery 替换 SQL Server 中的 xml 命名空间前缀

    mysql - 使用 EF6(和 Code First 迁移)针对不同的数据库系统

    sql - 为什么 where 子句中没有窗口函数?