SQLite:当它';s是一个单独的查询,但不';当它';这是一个更大问题的一部分
我是SQLite的新手,遇到了一个我不知道如何解决的问题 我有一个复杂的查询,其中一部分是滞后于user\u id列并创建滞后id列。如果两个条目不同,则“新建用户”列中的条目应为1或0 这是我的代码(我使用的是redash),它可以(正确地编译和执行)与更大的查询相比,后者的目标是查找用户执行了操作1、2和3的所有用户会话 现在,当我使用这个查询作为我的大查询的一部分时,它不会显示任何语法错误,但是lag\u id列与user\u id相同,new\u user始终为0。请帮我调试一下,我不知道我做错了什么,谢谢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。请帮我调试一下,我不知
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
样本数据、期望的结果以及对计算结果的清晰解释都会有所帮助。