Snowflake cloud data platform 雪花横向子查询失败

Snowflake cloud data platform 雪花横向子查询失败,snowflake-cloud-data-platform,Snowflake Cloud Data Platform,如果在Snowflake中运行下面的SQL,您将看到它返回SQL编译错误:无法计算不支持的子查询类型。就我的一生而言,我不知道如何重写它,以便它能完成我想做的事情。有什么建议吗 CREATE OR REPLACE TABLE TEST1 ( ROWID INT IDENTITY(1,1), DATESTAMP TIMESTAMP_NTZ(9), STATE_ID INT, IS_TEST BOOLEAN, USER_ID INT, GROUP_I

如果在Snowflake中运行下面的SQL,您将看到它返回SQL编译错误:无法计算不支持的子查询类型。就我的一生而言,我不知道如何重写它,以便它能完成我想做的事情。有什么建议吗

CREATE OR REPLACE TABLE TEST1 
(
    ROWID INT IDENTITY(1,1),
    DATESTAMP TIMESTAMP_NTZ(9),
    STATE_ID INT,
    IS_TEST BOOLEAN,
    USER_ID INT,
    GROUP_ID INT,
    SECONDARY_USER_ID INT
);

INSERT INTO TEST1 (DATESTAMP, STATE_ID, IS_TEST, USER_ID, GROUP_ID) SELECT '01/01/2020', 31, TRUE, 1, 1;
INSERT INTO TEST1 (DATESTAMP, STATE_ID, IS_TEST, USER_ID, GROUP_ID) SELECT '02/01/2020', 31, TRUE, 1, 1;
INSERT INTO TEST1 (DATESTAMP, STATE_ID, IS_TEST, USER_ID, GROUP_ID) SELECT '05/01/2020', 29, NULL, 5, 1;
INSERT INTO TEST1 (DATESTAMP, STATE_ID, IS_TEST, USER_ID, GROUP_ID) SELECT '06/01/2020', 32, TRUE, 6, 1;

UPDATE TEST1 T1
SET SECONDARY_USER_ID = TSU.USER_ID
FROM TEST1 TS, 
    LATERAL (SELECT TOP 1 USER_ID                 
             FROM TEST1 X
             WHERE USER_ID <> 3
             AND X.DATESTAMP < TS.DATESTAMP
             AND TS.GROUP_ID = X.GROUP_ID
             AND (
                (X.STATE_ID = 29 and TS.IS_TEST IS NULL)
                  OR
                (X.STATE_ID = 32 and TS.IS_TEST = TRUE)
              )
             ORDER BY X.DATESTAMP DESC
            ) TSU
WHERE TS.STATE_ID = 31 
AND TS.ROWID = T1.ROWID;

如果替换以下内容,则查询将起作用:

按X选择前1[…]个订单。日期戳说明

GROUPORDER内的数组\u AGGX.USER\u ID BY X.DATESTAMP DESC[0]

完整查询:

更新test1t1 设置辅助用户\u ID=TSU.USER\u ID 从test1ts开始, 横向选择GROUPORDER内的数组\u AGGX.USER\u ID(按日期戳DESC[0]USER\u ID) 从test1x开始 其中用户ID为3 和X.邮戳期望的最终结果是什么?换句话说,这个查询的目标是什么?现实生活中的场景很难解释,但这里的目标是前两行,其中STATE_ID=31,以SECONDARY_USER_ID=6结束,因为这是满足条件的最新行。这很有效!谢谢我必须翻转X.DATESTAMP