【发布时间】:2017-07-19 21:06:55
【问题描述】:
我不确定以前是否有人问过这个问题,因为我自己也很难问。我认为解释我的困境的最好方法是举一个例子。
假设我 10 年来每天以 1 到 10 的等级对我的幸福进行评分,我将结果放在一个大表中,其中有一个日期对应于我的幸福评分的单个整数值。不过,我说,我只关心平均超过 60 天的幸福感(这可能看起来很奇怪,但这是一个简化的例子)。因此,我将这些信息汇总到一个表中,其中我现在有一个开始日期字段、一个结束日期字段和一个平均评分字段,其中开始日期是所有 10 年中从第一天到最后一天的每一天,但结束日期正好在 60 天后。需要明确的是,这 60 天是重叠的(一个与下一个共享 59 天,与下一个共享 58 天,依此类推)。
接下来我选择一个阈值评级,比如 5,我想将低于它的所有内容归为“差”类别,将高于该类别的所有内容归为“好”类别。我可以轻松地添加另一个字段并使用案例结构为每 60 天的范围指定一个“好”或“坏”标志。
然后总结一下,我想显示从最大开始日期到最大结束日期的“好”和“坏”的总时间段。这就是我卡住的地方。我可以按好/坏类别分组,然后只取最小值(开始日期)和最大值(结束日期),但是如果范围从好到坏再到好再到坏,输出将显示重叠范围好的和坏的。在上述情况下,我想展示四个不同的范围。
我意识到这对我来说可能比其他人更清楚,所以如果您需要澄清,请询问。
谢谢
---编辑---
以下是之前的示例:
开始日期|结束日期|情绪评级
------------+------------+------------
1991 年 1 月 1 日 |1991 年 3 月 1 日 | 7
1991 年 1 月 2 日 |1991 年 3 月 2 日 | 7
1991 年 1 月 3 日 |1991 年 3 月 3 日 | 4
1991 年 1 月 4 日 |1991 年 3 月 4 日 | 4
1991 年 1 月 5 日 |1991 年 3 月 5 日 | 7
1991 年 1 月 6 日 |1991 年 3 月 6 日 | 7
1991 年 1 月 7 日 |1991 年 3 月 7 日 | 4
1991 年 1 月 8 日 |1991 年 3 月 8 日 | 4
1991 年 1 月 9 日 |1991 年 3 月 9 日 | 4
之后:
最小开始|最大结束 |好/坏
------------+------------+----------
1991 年 1 月 1 日|1991 年 3 月 2 日 |好
1991 年 1 月 3 日|1991 年 3 月 4 日 |不好
1991 年 1 月 5 日|1991 年 3 月 6 日 |好
1991 年 1 月 7 日|1991 年 3 月 9 日 |不好
目前我对按评级分组的查询将显示:
最小开始|最大结束 |好/坏
------------+------------+----------
1991 年 1 月 1 日|1991 年 3 月 6 日 |好
1991 年 1 月 3 日|1991 年 3 月 9 日 |不好
这有点像
选择 min(StartDate), max(EndDate), Good_Bad
来自源表
由 Good_Bad 分组
【问题讨论】:
-
这是一个很好的问题开始。请添加一些示例数据 - 以及您期望的结果。这将帮助每个人准确理解您的要求。
-
添加了一个编辑@stan
-
另外,请分享您正在使用的查询。
-
嗯 - 我可以使用
CURSOR来做到这一点,但必须有更好的方法。好问题! -
为什么要使用光标?除非我想错了问题,否则使用基于集合的解决方案很容易。
标签: sql sql-server group-by