SQLite:当它';s是一个单独的查询,但不';当它';这是一个更大问题的一部分

SQLite:当它';s是一个单独的查询,但不';当它';这是一个更大问题的一部分,sql,sqlite,Sql,Sqlite,我是SQLite的新手,遇到了一个我不知道如何解决的问题 我有一个复杂的查询,其中一部分是滞后于user\u id列并创建滞后id列。如果两个条目不同,则“新建用户”列中的条目应为1或0 这是我的代码(我使用的是redash),它可以(正确地编译和执行)与更大的查询相比,后者的目标是查找用户执行了操作1、2和3的所有用户会话 现在,当我使用这个查询作为我的大查询的一部分时,它不会显示任何语法错误,但是lag\u id列与user\u id相同,new\u user始终为0。请帮我调试一下,我不知

我是SQLite的新手,遇到了一个我不知道如何解决的问题

我有一个复杂的查询,其中一部分是滞后于user\u id列并创建滞后id列。如果两个条目不同,则“新建用户”列中的条目应为1或0

这是我的代码(我使用的是redash),它可以(正确地编译和执行)与更大的查询相比,后者的目标是查找用户执行了操作1、2和3的所有用户会话

现在,当我使用这个查询作为我的大查询的一部分时,它不会显示任何语法错误,但是lag\u id列与user\u id相同,new\u user始终为0。请帮我调试一下,我不知道我做错了什么,谢谢

SELECT *,
CASE WHEN (user_id = LAG_ID) THEN 0 ELSE 1 END AS NewUser
                        FROM 
                            (SELECT *,
                            (lag(user_id, 1 , 0) over (order by user_id DESC, created_at ASC)) AS LAG_ID
                            From query_655376)```



Here's the bigger query:

```select * from( 
    select * from(
    select *, 
    case when (B_Visited > 0) AND C then 1 else 0 end  AS C_Success from(
        select *
        , sum(B_Success) over (Partition BY SessionID order by user_id DESC, created_at ASC ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)  AS B_Visited   
        from
            (
    
    select *, 
    case when (A_Visited > 0) AND B then 1 else 0 end AS B_Success from(
        select *, A as A_Success
        , sum(A) over (Partition BY SessionID order by user_id DESC, created_at ASC ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)  AS A_Visited   
        from
           (
            select *, sum(NewSession) over (order by user_id DESC, created_at ASC ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) as SessionID from
            (
            select *, case when (Date_Diff >= 60 ) or NewUser  then 1 ELSE 0 END AS NewSession from
                (
                select user_id, created_at, lag_id, 
                    CASE action  WHEN 'lms_practice'  THEN  1 ELSE 0 END as A,
                    CASE action  WHEN 'lms_view_step_content'  THEN  1 ELSE 0 END as B,
                    CASE action  WHEN 'lms_fin_cur_step_content'  THEN  1 ELSE 0 END as C,
                    (strftime('%s',created_at)-strftime('%s',lag(created_at) over (order by user_id DESC, created_at ASC)))/60 as Date_Diff, 
                    CASE WHEN (user_id = LAG_ID) THEN 0 ELSE 1 END AS NewUser
                         FROM 
                            (SELECT *,
                            lag(user_id, 1 , 0) over (order by user_id DESC, created_at ASC) AS lag_id
                            From query_655376)
                order by user_id DESC, created_at ASC
                )
            )
        ) 
    )))    
    )  
    where C_Success > 0
    order by user_id DESC, created_at ASC);```

我推测您只需要基于在创建的来获取以前的用户id。这将表明:

(SELECT q.*,
        lag(user_id) over (order by created_at ASC)) AS LAG_ID
 FROM query_655376 q
)
请注意,这将从订单中删除用户id描述,

请注意区别:

User_id     Created_At     Yours      Mine
   1            1           NULL      NULL
   2            2            1         1
   1            3            1         2
   1            4            1         1
   3            5            2         1

样本数据、期望的结果以及对计算结果的清晰解释都会有所帮助。