【发布时间】:2016-11-02 16:27:43
【问题描述】:
我在 SQL Server 2012 中有一个数据集,需要遵循以下原则:
“席位”允许在第一个结果后的 6 个月内获得 8 个结果。如果从第一个结果之日起的 6 个月内有超过 8 个结果,则会给出一个新的“座位”。
如果一个结果是从第一个结果之日起 6 个月内创建的,那么会给出一个新的“席位”
所以我有以下数据:
User DateCreated
---- -------------
User1 2015-01-01 16:05:00
User1 2015-01-02 16:05:00
User1 2015-01-03 16:05:00
User1 2015-01-04 16:05:00
User1 2015-01-05 16:05:00
User1 2015-01-06 16:05:00
User1 2015-01-07 16:05:00
User1 2015-01-08 16:05:00
User1 2015-01-09 16:05:00
User1 2015-01-10 13:25:00
User1 2015-01-11 13:25:00
User1 2015-01-12 13:25:00
User1 2015-09-01 13:00:00
User1 2016-04-01 13:00:00
User2 2015-01-01 13:25:00
User2 2015-01-02 13:25:00
User2 2015-09-01 13:25:00
User2 2016-01-01 13:25:00
User2 2016-05-01 13:25:00
User3 2015-01-01 16:05:00
User3 2015-01-02 16:05:00
User3 2015-01-03 16:05:00
根据上述规则,可以将它们分成以下“组”
User DateCreated Group
---- ------------- -----
User1 2015-01-01 16:05:00 1
User1 2015-01-02 16:05:00 1
User1 2015-01-03 16:05:00 1
User1 2015-01-04 16:05:00 1
User1 2015-01-05 16:05:00 1
User1 2015-01-06 16:05:00 1
User1 2015-01-07 16:05:00 1
User1 2015-01-08 16:05:00 1 /*8 results within 6 months from first row*/
User1 2015-01-09 16:05:00 2
User1 2015-01-10 13:25:00 2
User1 2015-01-11 13:25:00 2
User1 2015-01-12 13:25:00 2
User1 2015-09-01 13:00:00 3 /*created 6+ months after previous row*/
User1 2016-04-01 13:00:00 4 /*created 6+ months after previous row*/
----
User2 2015-01-01 13:25:00 1
User2 2015-01-02 13:25:00 1
User2 2015-09-01 13:25:00 2 /*created 6+ months after previous row*/
User2 2016-01-01 13:25:00 2
User2 2016-05-01 13:25:00 3 /*created 6+ months after previous row*/
----
User3 2015-01-01 16:05:00 1
User3 2015-01-02 16:05:00 1
User3 2015-01-03 16:05:00 1 /*3 results within 6 months from first row, within the 8 result cut-off */
最后可能会是这样的
User Seats
---- -----
User1 4
User2 3
User3 1
如果有的话,如何在 SQL 查询中实现这一点?
--
好的,所以评论 https://stackoverflow.com/a/40385655/1283391 到了一半,我已经修改了上面的预期输出以解释差异,因为我的解释不正确。
我认为我不需要SUM,而需要总和。
【问题讨论】:
标签: sql-server sql-server-2012 grouping