【发布时间】:2018-06-28 02:09:33
【问题描述】:
我有一个客户操作的 SQL 数据库,客户由 UniqueId 定义,操作被赋予操作时间戳的日期和时间。用户可以在任何一天执行多个操作,如下所示:
UniqueID | actionDate | actionTime |
1 17-01-18 13:01
1 17-01-18 13:15
2 17-01-18 13:15
1 18-01-18 12:56
理想情况下,我想在单个查询中了解数据库中的多个内容。
首先是每个 uniqueId 在给定时间段(天、周、月)内执行操作的次数,因此对于上面的示例,18 年 1 月 17 日 id1 的计数为 2 ,18-01-18 的计数为 1,并假设它们是该周仅有的两个动作,则该周 id 1 的计数为 3。
在有多个操作的日子(上例中为 17-01-18),我想了解一天中操作的分布,更重要的是了解在一个时间范围内发生的操作数量一个小时。在这种情况下,id 想了解 13:00 到 14:00 之间发生了 2 个操作,id 1 但其他 23 小时有 0 个操作。
最终目标是拥有一个回顾三个月的时间序列,并能够查看每个唯一 ID 的每月、每周以及重要的每日/每日内部操作计数。
所需的结果可能如下所示:
ID | M1W1D1H1|M1W1D1H2|->|M1W1D1H13|->|M1W1D2H12|
1 0 0 2 1
2 0 0 1 0
M=月,W=周,D=日,H=小时。 AC = ActionCount
所以上面显示在第 1 个月,第 1 周,第 1 天,第 1 小时,id1 没有任何操作。第一个动作是在 M1W1D1H13 上,当时他们有两个动作。接下来的行动是在 W1、M1 的 D2 上。然后可以汇总以获得相应的、每周、每天的每月操作。结果将是相当稀疏的许多 0 操作。
感谢任何帮助和指导。
【问题讨论】:
-
编辑您的问题并提供所需的结果。正如所写,这个问题太宽泛了。
-
@a_horse_with_no_name - 我的错,它的 Teradata
-
三个月的结果约为。结果集中 92*24 = 2208 小时 = 2208 列。除了 Teradata 仅支持 2048 列之外,这应该在表示层中完成。要获取每小时的基本计数,您可以使用 group by
UniqueID, actionDate, extract(hour from actionTime)
标签: sql teradata data-manipulation