当前位置: 首页 > 面试题库 >

如何在SQL中识别连续日期组?

赏成益
2023-03-14
问题内容

我试图写一个函数来识别日期组,并测量组的大小。

到目前为止,我一直在使用Python进行此过程,但我想将其移入SQL。

例如清单

Bill 01/01/2011 
Bill 02/01/2011 
Bill 03/01/2011 
Bill 05/01/2011 
Bill 07/01/2011

应该输出到新表中,如下所示:

Bill 01/01/2011  3 
Bill 02/01/2011  3 
Bill 03/01/2011  3 
Bill 05/01/2011  1 
Bill 07/01/2011  1

理想情况下,这还应该能够解决周末和公共假日的问题-
我表中的日期应该是周一至周五(我想我可以通过制作一个新的工作日表并按顺序编号来解决此问题)。有人建议我尝试CTE。我对此很陌生,因此,我感谢任何人都可以提供的任何指导!谢谢。


问题答案:

您可以通过巧妙地使用窗口功能来做到这一点。考虑以下:

select name, date, row_number() over (partition by name order by date)
from t

这将添加一个行号,在您的示例中该行号将简单地为1、2、3、4、5。现在,取与日期的差值,并且该组具有一个恒定值。

select name, date,
       dateadd(d, - row_number() over (partition by name order by date), date) as val
from t

最后,您需要顺序的组数。我还将添加一个组标识符(例如,以区分最后两个)。

select name, date,
       count(*) over (partition by name, val) as NumInSeq,
       dense_rank() over (partition by name order by val) as SeqID
from (select name, date,
             dateadd(d, - row_number() over (partition by name order by date), date) as val
      from t
     ) t

不知何故,我错过了有关工作日和节假日的部分。此解决方案不能解决该问题。



 类似资料:
  • 问题内容: 有没有检查连续日期的功能。我在处理以下问题时遇到问题: 我的表有一个包含以下数据的列: 给定的开始日期为,结束日期为。我想要的结果是: 有人可以建议什么吗? 问题答案: 我认为这是 “连续日期分组岛” 问题的一种变体。可以使用以下方法完成: SQL小提琴 结果 这是SQL Server 2005版本: SQL小提琴

  • 问题内容: 我想使用Java中的当前日期来标识整个星期的日期(从星期日到星期六)。 例如:今天是星期二-这意味着我需要星期二,星期一和星期日的日期。 如果当前日期是星期三-那么我需要从星期日到星期三的日期。 如何在Java中实现此逻辑? 我可以从当前日期开始一周的开始,但是我不知道如何从周开始日期开始获得剩余的日期。是否有可用的Java实用程序? 问题答案: 供参考,当前用于制定输出的日期为201

  • 问题内容: 我正在读取一堆CSV文件(一段时间内水位的测量数据)以对它们进行各种分析和可视化。 由于无法控制的各种原因,这些时间序列通常缺少数据,因此我要做两件事: 我总共算他们 如果我缺少的数据多于某个阈值,则丢弃数据集: 如果NaN的数量足够少,我想用 现在要解决的是:它的月度数据,所以如果我连续有两个以上的NaN,我也想丢弃该数据,因为那将意味着我“猜测”了整个季节,甚至更多。 的文档没有真

  • 问题内容: 我有这样的df: 如果两个或两个以上连续出现in和a如果没有连续出现,我想在新列中返回a 。因此,在新列中,每一行都将基于该列中满足的此条件获得一个。我想要的输出将是: 我想我可能需要使用,但是我一直在阅读,还没有发现我需要的东西。我希望能够使用此方法来计数任意数量的连续出现,而不仅仅是2。例如,有时我需要计算10次连续出现,在这里的示例中我只使用2次。 问题答案: 你可以: 要得到:

  • 如何使用REST API(带javascript SDK)Bing语音API实现连续语音识别? 使用do Javascript SDK示例:https://github.com/Microsoft/Cognitive-Speech-STT-JavaScript只能用麦克风转录短句

  • 问题内容: 我需要做什么 我有一个不了解时区的datetime对象,我需要向其添加一个时区,以便能够将其与其他时区感知的datetime对象进行比较。对于这一旧情况,我不想将我的整个应用程序转换为时区。 我尝试过的 首先,演示问题: 首先,我尝试了astimezone: 这次失败并不令人惊讶,因为它实际上是在尝试进行转换。替换似乎是一个更好的选择(根据Python:如何获取“时区感知”的datet