【发布时间】:2016-04-06 20:57:43
【问题描述】:
我有下表:
+----------+----------+--------------+
| Customer | Month | Had Meeting? |
+----------+----------+--------------+
| John | Jan-15 | N |
| John | Feb-15 | Y |
| John | March-15 | Y |
| John | April-15 | N |
| John | May-15 | N |
| John | June-15 | N |
| John | July-15 | N |
| John | Aug-15 | N |
| John | Sep-15 | N |
| John | Oct-15 | N |
| John | Nov-15 | Y |
| John | Dec-15 | N |
+----------+----------+--------------+
我希望应用一个逻辑来查看客户并检查他在滚动的 3 个月期间是否有任何会议。这一时期是指会议可能发生的动态间隔。即 - 在 5 月 15 日的记录中,我希望查看 2 月至 7 月之间的时期。
如果有超过 1 个会议,我希望返回最早的会议。
即,在 1 月 15 日,我想查看 1 月和 3 月之间的间隔,它捕获了 2 次会议,我想返回两者中较早的一次(2 月)。
2 月我想查看 1 月和 4 月之间的时间间隔(前 2 个月和后 2 个月)-再次,它应该返回 2 月的会议。
3 月我希望查看 1 月 - 5 月(这实际上是我需要捕获的 2 个月之前和 2 个月之后的完整时间迭代) - 再次返回 2 月。
我希望从这个数据集中获得的最终结果是 2 月和 11 月的会议。 我想我需要类似的东西:
row_number() over(partition by Customer order by Sale_made, Month Rows between 2 preceding and 2 following)
但是 row_number 不能用作窗口函数。
我使用的是 TD v 13.0。
感谢您的帮助。
阿萨夫。
【问题讨论】:
-
为什么
03.03.2015和10.11.2015应该出现在您的结果中?它们不符合 3 个月的间隔,即使符合,您的逻辑中的第 3 点在这种情况下似乎也不清楚。 -
我的意图是在滚动的 3 个月间隔内仅捕获一次会议。在上面的例子中,1 月到 3 月之间有 2 次会议,因此我只收到销售会议的结果。
-
请编辑您的问题,提供有关您的间隔的信息。您是否在 WHERE 条件下根据当前日期查询间隔?如果在当前窗口(3 个月)内没有会议结束销售,那么应该返回哪个日期?当前窗口的最小值?如果在这 3 个月内所有会议结束日期都是
null怎么办?你需要澄清一些事情。现在一切都guess'n'go。 -
感谢您的评论。我简化了问题并改变了问题的范围。
-
你试过
COUNT(CASE WHEN had_meeting = 'y' THEN 1 ELSE 0 END) over(partition by Customer order by Sale_made, Month Rows between 2 preceding and 2 following)