Amazon Redshift 中的递归 CTE

2023-12-24

我们正在尝试移植代码以在 Amazon Redshift 上运行,但 Refshift 不会运行递归 CTE 函数。有好心人知道如何移植这个吗?

with tt as (
      select t.*, row_number() over (partition by id order by time) as seqnum
      from t
     ),     
     recursive cte as (
      select t.*, time as grp_start
      from tt
      where seqnum = 1
      union all
      select tt.*,
             (case when tt.time < cte.grp_start + interval '3 second'
                   then tt.time
                   else tt.grp_start
               end)
      from cte join
           tt
           on tt.seqnum = cte.seqnum + 1
     )
select cte.*,
       (case when grp_start = lag(grp_start) over (partition by id order by time)
             then 0 else 1
        end) as isValid
from cte;

或者,使用不同的代码来重现下面的逻辑。

  • 这是一个二进制结果:
  • 如果它是 ID 的第一个已知值,则为 1
  • 如果比该 ID 的前一个“1”晚 3 秒或晚,则为 1
  • 如果比该 ID 的前一个“1”小于 3 秒,则为 0

注1:这不是与之前记录的秒数差异
注2:数据集中有很多ID
注3:原始数据集有ID和日期

期望的输出:https://i.stack.imgur.com/k4KUQ.png https://i.stack.imgur.com/k4KUQ.png

数据集poc:http://www.sqlfiddle.com/#!15/41d4b http://www.sqlfiddle.com/#!15/41d4b


截至撰写本文时,Redshift 确实支持递归 CTE:请参阅此处的文档 https://docs.aws.amazon.com/redshift/latest/dg/r_WITH_clause.html#r_WITH_clause-recursive-cte-example

在 Redshift 中创建递归 CTE 时要注意:

  • 开始查询:with recursive
  • 列名must为所有递归 cte 声明

请考虑以下使用递归 CTE 创建日期列表的示例:

with recursive
      start_dt as (select current_date s_dt)
      , end_dt as (select dateadd(day, 1000, current_date) e_dt)
      -- the recusive cte, note declaration of the column `dt`
      , dates (dt) as (
            -- start at the start date
            select s_dt dt from start_dt
            union all
            -- recursive lines
            select dateadd(day, 1, dt)::date dt  -- converted to date to avoid type mismatch
            from dates
            where dt <= (select e_dt from end_dt)  -- stop at the end date
      )
select *
from dates
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Amazon Redshift 中的递归 CTE 的相关文章

  • Ruby ActiveRecord 和 sql 元组支持

    ActiveRecord 是否支持 where 子句中的元组 假设底层数据库支持 结果 where 子句看起来像这样 where name address in John 123 Main St I tried Person where n
  • 如何使用一个命令删除 SQL 数据库中的所有索引?

    那么 如何通过一条命令删除 SQL 数据库中的所有索引呢 我有这个命令可以获取所有 20 个左右的 drop 语句 但是如何从这个 结果集 运行所有这些 drop 语句呢 select from vw drop idnex 给我相同列表的另
  • 更改表添加列并在同一条件 IF 语句中更新新列

    我正在尝试添加列并在同一 if 语句中更新它 BEGIN TRAN IF NOT EXISTS SELECT 1 FROM sys columns WHERE Name N Code AND Object ID Object ID N Te
  • 针对约 225 万行的单表选择查询的优化技术?

    我有一个在 InnoDB 引擎上运行的 MySQL 表 名为squares大约有 2 250 000 行 表结构如下 squares square id int 7 unsigned NOT NULL ref coord lat doubl
  • 查看Jasper报告执行的SQL

    运行 Jasper 报表 其中 SQL 嵌入到报表文件 jrxml 中 时 是否可以看到执行的 SQL 理想情况下 我还想查看替换每个 P 占位符的值 Cheers Don JasperReports 使用 Jakarta Commons
  • 使用用户定义函数 MySql 时出错

    您好 请帮我解决这个问题 提前致谢 我在数据库中定义了这些函数 CREATE FUNCTION levenshtein s1 VARCHAR 255 s2 VARCHAR 255 RETURNS INT DETERMINISTIC BEGI
  • 如何使用 SQL Server 2008 执行多个 CASE WHEN 条件?

    我想做的是对同一列使用多个 CASE WHEN 条件 这是我的查询代码 SELECT Url p ArtNo p Description p Specification CASE WHEN 1 1 or 1 1 THEN 1 ELSE 0
  • MySQL NOT IN 来自同一个表中的另一列

    我想运行 mysql 查询来选择表中的所有行films其中的值title该列不存在于另一列的所有值中的任何位置 collection 这是我的表格的简化版本 其中包含内容 mysql gt select from films id titl
  • 如何将今天的日期返回到 Oracle 中的变量

    我想做这个 DECLARE today as smalldatetime SELECT today GetDate 但我需要一个oracle翻译 甲骨文使用SYSDATE 还有 ANSI 标准CURRENT TIMESTAMP 除其他外 S
  • 从表中选择行,其中另一个表中具有相同 id 的行在另一列中具有特定值

    在 MySQL 中 如果我们有两个表 comments key value 1 foo 2 bar 3 foobar 4 barfoo and meta comment key value 1 1 2 1 3 2 4 1 我想得到来自以下人
  • 默认情况下在sql日期时间列中插入null/空值

    如何在 SQL Server 中创建一个表 默认日期时间为空 而不是1900 01 01 00 00 00 000我得到了 我的意思是 如果没有插入值 则默认值应该为 null 空等 如果没有插入值 默认值应该是null empty 在表定
  • 计算日期之间的天数差异

    在我的代码中 日期之间的差异是错误的 因为它应该是 38 天而不是 8 天 我该如何修复 package random04diferencadata import java text ParseException import java t
  • SQL Server:如果存在会大大减慢查询速度

    正在使用SQL Server 2012 我找到了一些关于查询优化的主题 并将 EXISTS 与 COUNT 进行比较 但我找不到这个确切的问题 我有一个看起来像这样的查询 select from tblAccount as acc join
  • SQLite SQL 查询出现问题[重复]

    这个问题在这里已经有答案了 我正在尝试在 SQLite 3 中运行以下查询 SELECT DISTANCE latitude longitude AS distance FROM country WHERE id NOT LIKE HAVI
  • 使用来自另一个的 SELECT 更新表,但字段为 SUM(someField)

    基本上我有这样的事情 UPDATE Table SET Table col1 other table col1 FROM Table INNER JOIN other table ON Table id other table id 问题是
  • PostgreSQL 和锁定

    希望一些比我更聪明的 DBA 可以帮助我找到一个好的解决方案来完成我需要做的事情 为了便于讨论 我们假设我有一个名为 work 的表 其中包含一些列 其中一列表示给定客户端对该行工作的所有权 场景是 我将连接 2 个客户端并轮询表以查找要完
  • 使用 SQL 完全复制 postgres 表

    免责声明 这个问题和栈溢出问题类似here https stackoverflow com questions 198141 copy a table including indexes in postgres 但这些答案都不适用于我的问题
  • 访问数据库 LIMIT 关键字

    我试图让我的页面列表功能在 ASP 中与 Access 数据库一起工作 但我不知道 Microsoft SQL 中 LIMIT 的替代方案 我已经尝试过 TOP 但这似乎不起作用 这是 MySQL 中使用的语句 SELECT FROM cu
  • Oracle SQL-根据记录的日期与历史记录标记记录

    这是我在论坛上的第一篇文章 通常我能够找到我需要的东西 但说实话 我不太确定如何针对该问题提出正确的问题 因此 如果论坛上已经有答案而我错过了 请接受我的歉意 我通过 Benthic Software 在 Oracle 数据库中运行以下代码
  • MYSQL 按喜欢/不喜欢和受欢迎程度排序

    我有评论表 其中包括喜欢和不喜欢的内容 现在我在正确的顺序上遇到了问题 实际上 我的系统在顶部显示了最多点赞的评论 我正在 youtube 上寻找类似系统的东西 这意味着 100like 100dislikes 的评论的顺序高于 1 1 我

随机推荐

  • Flutter:获取 HTML 页面的某些元素

    我最近开始使用 dart 和 flutter 为动物收容所开发一个应用程序 但遇到了问题 这个想法是有一个捐赠页面 用户可以选择为狗购买食物 打开的脚手架将显示食物的图片 并从销售所述食物的网站获取一些数据以及当前价格 该图像作为资产存储在
  • 如何在 vim 中自动格式化/缩进 C 代码?

    当我从另一个文件复制代码时 格式会变得混乱 如下所示 fun for for if 如何在 vim 中自动格式化此代码 尝试以下按键 gg G 解释 gg转到文件顶部 是一个修复缩进的命令G告诉它执行操作到文件末尾
  • C 中的线程

    我想在C中创建一个线程 以便该线程在两秒后自动调用 我使用Visual Studio和Windows平台进行开发 我该如何开始 您将需要使用操作系统特定的库来执行线程 在 Posix 上 你会想要研究一下pthreads https com
  • 向 Android 应用程序添加屏幕亮度控制

    我希望在应用程序菜单中添加控件来本地调整屏幕亮度 但似乎不知道如何操作 我已经看到了最大化或调暗亮度的示例 但我希望添加控件 以便用户可以控制和设置亮度级别 有谁有任何示例 教程 源代码 或者只是一个可以为我指明正确方向的地方 互联网 ht
  • 通过电话进行 Google 地图/地点 API 搜索

    我们有一个注册页面 用户可以在其中输入他的公司电话号码 我们想从电话号码中找到他的商业信息以进行验证 如何使用 Google 地点 地图 api 来完成此操作 还有更好的选择吗 我有点迷失了 通过谷歌 API 仔细检查后 他们的回复也没有返
  • 带换行符的长字符串

    我见过 C 代码使用 告诉编译器字符串中有换行符并且它应该全部在一行中 C C 有类似的东西吗 就像如果我想放这样的东西 73167176531330624919225119674426574742355349194934 96983520
  • Numpy 中一维数组的滚动窗口?

    有没有办法在 Numpy 中有效地实现一维数组的滚动窗口 例如 我有这个纯 Python 代码片段来计算一维列表的滚动标准差 其中observations是一维值列表 并且n是标准差的窗口长度 stdev for i data in enu
  • 如何在mysql中将日期格式的月份减一? [复制]

    这个问题在这里已经有答案了 假设我有一个 select 语句 SELECT COUNT wedding DATE FORMAT weddate y m d FROM weddingtable 我想让它可以从返回的月份中减去 1 例如 SEL
  • .Net 4 在 StrongNameSignatureVerification 上不断浪费一个 CPU 核心

    我们有一个在 Net 4 Windows 2008 R2 上运行的混合模式汇编应用程序 MFC WinForms 它在一个线程上不断使用 100 的 cpu 使用 ProcessExplorer 我们在繁忙的线程上看到以下堆栈 我们还可以看
  • 需要将mysql数据库中的图像显示到fpdf

    A 将图像作为 blob 保存在 mysql 数据库中 我希望使用 php 将其显示在 fpdf 中 我在执行此操作时遇到问题 因为我对 fpdf 很陌生 我真的需要帮助 谢谢 您将需要 FPDF 的此扩展 http www fpdf or
  • 对 Pandas DataFrame 描述输出进行排序

    我正在尝试对输出进行排序describe 与计数 不太清楚 怎么解决 Tried sort by and loc但它们都没有达到对描述的输出进行排序的目的 需要编辑以下代码行 df groupby Disease Category Appr
  • Rails中的Bootstrap Modal一直显示第一条记录

    当我单击模态中的 视图 时 它继续仅显示第一条记录 即使我单击第二条记录 它仍然显示第一条记录 下面是我如何实现 link to 切换到名为 myModal 的模式框 div class modal fade div class modal
  • 使用 AngularJS 进行 PUT 的 CORS 请求无效

    我的 Spring 应用程序中有一个映射 如下所示 PutMapping path test id public ResponseBody Shop putTest PathVariable id long id RequestBody U
  • 如何从我的应用程序打开 Google Play 商店应用程序以安装 Play 商店中提供的最新版本的应用程序

    我对应用程序的应用程序升级方案有疑问 基本上 我将应用程序版本从应用程序发送到应用程序服务器 然后决定是否显示应用程序升级提醒屏幕 应用程序升级提醒屏幕有 立即更新 或 忽略 2 个选项 要求是 立即更新 应该打开 Play 商店应用程序
  • 如何检查.NET 6运行时是否安装

    作为使用 NET 6 和 WiX 安装程序安装 WPF 应用程序的一部分 我想检查是否安装了 NET 6 运行时 WiX 提供了预定义的属性来检查 NET 框架的属性 但没有提供 NET Core 及其他版本的属性 因此我尝试检查注册表项是
  • 如何在Windows Azure上重写Codeigniter的index.php

    如何在 Windows Azure 和 IIS 上删除 codeigniter 中的 index php 我可以在没有特定模块的情况下重写 Codeigniter 的 index php 的 URL 吗 您可以在 web config 文件
  • 如何获取当前的QApplication?

    我试图使用 pyQt5 获取对当前 QApplication 对象的引用 但找不到该函数 我关于 pyQt get current QApplication 的搜索显示了有关如何创建 QApplication 的结果 所以我的问题是 是否存
  • Git - 分别进行不同的提交。 (使用“git pull”将远程分支合并到您的分支中)

    我的目标是删除 github 上所有提交中的一个文件 因此我执行了后续步骤 我用这个命令过滤了我的分支 git filter branch index filter git rm cached ignore unmatch file nam
  • R:如何根据另一个矩阵提取多维数组值的集合

    假设我有一个 4 维 n x n x n x n 数组 A A 是一个距离矩阵 使得 A i j l k 是从位置 i j 到位置对 l k 的距离 假设我有一个位置类型 T 的 nxn 矩阵 假设类型可以是 0 1 或 2 所以 T i
  • Amazon Redshift 中的递归 CTE

    我们正在尝试移植代码以在 Amazon Redshift 上运行 但 Refshift 不会运行递归 CTE 函数 有好心人知道如何移植这个吗 with tt as select t row number over partition by