Redshift 是不是支持 SELECT 中的用户定义变量?

Posted

技术标签:

【中文标题】Redshift 是不是支持 SELECT 中的用户定义变量?【英文标题】:Does Redshift support User-Defined Variables in SELECT?Redshift 是否支持 SELECT 中的用户定义变量? 【发布时间】:2019-06-10 05:11:19 【问题描述】:

我正在查看我们的一些 Redshift 查询,发现具有多个嵌套选择级别的案例,如下所示:

    LEFT JOIN
    (
        SELECT *
        FROM (
            SELECT
                id,
                created_at,
                min(created_at) OVER (PARTITION BY id, slug) AS transition_date
            FROM table
            WHERE status = 'cancelled'
            GROUP BY id, Y, Z, created_at
        )
        WHERE created_at = transition_date
    ) t1 ON b.id = t1.id

如果这是 mysql,我会做这样的事情来删除一级嵌套选择:

    LEFT JOIN
    (
        SELECT
            id,
            created_at,
            @tdate := min(created_at) OVER (PARTITION BY id, slug) AS transition_date
        FROM table
        WHERE status = 'cancelled' and @tdate = bul.created_at
        GROUP BY id, Y, Z, created_at
    ) t1 ON b.id = t1.id

在 RedShift 中是否可以做类似的事情?

--- 更新 忘记在嵌套的 SELECT 中包含 GROUP BY,这可能会影响答案

【问题讨论】:

【参考方案1】:

您可以将 transition_date 的条件移动到 JOIN 条件中:

LEFT JOIN
(
    SELECT
        id,
        created_at,
        min(created_at) OVER (PARTITION BY id, slug) AS transition_date
    FROM table
    WHERE status = 'cancelled'
) t1 ON b.id = t1.id AND t1.created_at = t1.transition_date

【讨论】:

谢谢我忘记在嵌套的SELECT中包含GROUP BY,这可能会影响你的回答 @user1525248:不,它没有

以上是关于Redshift 是不是支持 SELECT 中的用户定义变量?的主要内容,如果未能解决你的问题,请参考以下文章

Node-Redshift 是不是支持复制命令(查询)将数据从 S3 加载到 Redshift?

Redshift 中的列主要卸载

Redshift:连接到由表中的 SELECT * 组成的子查询/CTE 相当于连接表本身,还是性能下降?

SQL 中两个 SELECT 语句的减法(redshift)

redshift 返回的结果集是不是支持重置迭代器?

Amazon Redshift 是不是支持扩展 dblink?