【发布时间】:2023-03-06 16:57:01
【问题描述】:
如果对以下内容很重要,将对查询本身使用 Netezza 后端 + SPSS Modeler 和/或 Advanced Query Tool。我无法访问 CLI。我试图了解是否需要游标和遍历排序表来处理以下内容:
想象一个有 2 列的表,第一列是非唯一 ID,第二列是日期。任何给定的 ID 都可能在一个或多个日期出现在表中多次。
我的目标是从该表中选择日期间隔不少于固定天数(例如 90 天)的行。例如:
| ID | DATE |
===================
X 2014-01-01
X 2014-02-01
X 2014-07-01
Y 2014-02-01
Y 2014-06-01
Y 2014-07-01
在上面的示例中,我要为 X 选择的行将是 Jan 1 和 Jul 1(不包括 2 月 1 日,因为它距 1 月 1 日不到 90 天),而 Y 的行将是 Feb 1 和 Jun 1 (排除 7 月 1 日,因为它在前一个案例的 90 天内。
实际上,表中可能有超过 1 亿行。没有游标可以做到这一点吗?最佳方法是什么?
提前感谢您的任何建议!
编辑:在此处扩展了测试表数据。 SQL Fiddle
在上面编辑的示例中,所需的输出将是
| ID | DATE |
===================
X 2014-01-01
X 2014-04-01
X 2014-10-01
Y 2014-01-15
Y 2014-04-15
Y 2014-10-15
Z 2014-01-01
Z 2014-04-01
Z 2014-10-01
【问题讨论】:
-
那么当您说间隔不少于 90 天时,即从特定 ID 的最低日期算起 90 天?
-
例如,如果您有一行 X 2014-10-01,该怎么办?在这种情况下,您希望选择哪些行?
-
好问题 - Shree.pat18) 是的,在我发布的示例中,我想从给定 ID 的最低值开始,但在实际实施中,我们可能需要做相反的事情并从最高值开始.我只是为这个例子选择了一个方向。 Nizam) 如果有行 X 2014-10-01,那么选择 ID=X 的行将是 Jan 1、Jul 1 和 Oct 1,因为 Oct 1 距离 2014-07-01 超过 90 天。
-
我认为您可以删除 sql-server 和 mysql 标签。例如,您会接受仅适用于 sql-server 的答案吗?使用 CTE 递归、CROSS APPLY 等...?
-
是否可以使用变量表(sql-server)?
标签: mysql sql sql-server recursion netezza