【发布时间】:2011-01-09 06:35:48
【问题描述】:
我有一个 Occurrences 表,其中包含用户每次执行操作时的一行。用户每天多次执行一个操作。它看起来像这样:
Date Username
------ --------
1/1/9 User1
1/1/9 User1
1/1/9 User2
1/2/9 User1
1/2/9 User3
1/3/9 User1
1/3/9 User1
1/3/9 User1
1/3/9 User2
1/3/9 User3
1/4/9 User1
1/5/9 User1
1/6/9 User1
1/7/9 User1
对于该范围内的每一天,我想显示多次执行该操作的人数 - 例如 2 到 5 次、6 到 10 次以及 10 次以上。但是,我仅考虑在不同的日子重复该操作以计为该操作的另一个实例。例如,如果用户在第一天做了 3 次,然后在第二天再做任何 # 次,我看到用户已经做了 2 次操作,因此应该在 2 到 5 次列。
上述样本数据对应的结果集为:
#_of_people #_of_people #_of_people
who_did_action who_did_action who_did_action
Date 2to5_times 6to10_times more_than_10 Total
----- -------------- -------------- -------------- -----
1/1/9 0 0 0 0
1/2/9 1 0 0 1
1/3/9 3 0 0 3
...
1/7/9 0 1 0 1
请注意,结果的每一行都在计算重复操作的次数仅针对特定日期 - 不是累积的。
- 1/1/9 行全为零,因为这是第一天,所有操作都被视为第一天。
- 1/2/9 行是 1、0、0、1,因为只有 User1 重复了 - 这是 User3 的第一次。
- 1/3/9 行是 3,0,0,3 因为 User1 重复了两次,User2 重复了一次,User3 也重复了一次。
- 1/7/9 行是 0、1、0、1,因为 User1 重复了 6 次。
【问题讨论】:
-
日期是日期时间数据类型。但如果有必要,我很乐意在任何事物之间进行转换。 :)
-
在这种情况下是 2008 年,但确实如此。如果可能,更愿意使用非特定于版本的功能,但如果没有,请不要担心。
-
用户 1 如何从 1/3/9 重复两次到 1/4/9 重复 6 次?也许我很密集,但我无法理解你的数字。
-
@Tom H.:我相信表格只是日志。
-
@Tom - 不确定您是否看到我的最后一条评论,但我刚刚删除了它。你是绝对正确的 - 我的意思是说“1/7/9”行是 0、1、0、1。我已经进行了更正。感谢您指出这一点。
标签: sql sql-server tsql aggregate pivot