簡體   English   中英

在子查詢外使用子查詢的結果

[英]Use the result of a sub-query outside of the sub-query

我有一個這樣結構的表。

用戶身份 訂閱類型 時間戳
100 支付中 2/10/2021
99 審判 2/10/2021
100 審判 15/9/2021

我希望我的 output 保持不變,當訂戶轉換為付費訂閱時,增加一個列來提取試用開始日期。

用戶身份 訂閱類型 時間戳 試用_開始_日期
100 支付中 2/10/2021 15/9/2021
99 審判 2/10/2021
100 審判 2/10/2021

目前,我有這個查詢:

SELECT *,
CASE WHEN    
            (SELECT `subscription_type` FROM subscription_event se1
            WHERE se1.`timestamp` < se.`timestamp` AND se1.user_id = se.user_id
            ORDER BY user_id DESC LIMIT 1) = 'TRIAL'
        then se1.`timestamp` else 0 end as "Converted_from_TRIAL"

FROM subscription_event se

我有一條關於 se1 的錯誤信息。 未定義timestamp 我明白為什么,但我看不到解決方法。

任何指針?

如果您需要從子查詢中獲取兩個值,則必須將其連接起來,而不是將其用作表達式。

SELECT se.*,
    MAX(se1.timestamp) AS Converted_from_TRIAL
FROM subscription_event AS se
LEFT JOIN subscription_event AS se1 ON se.user_id = se1.user_id AND se1.timestamp < se.timestamp AND se1.subscription_type = 'TRIAL'
GROUP BY se.user_id, se.subscription_type, se.timestamp

非常感謝。 由於某些原因,我需要在 SELECT 中明確聲明 GROUP BY 中使用的變量。 不知道為什么(我使用的是 MySQL5.7,所以可能與此相關),無論如何。 這是工作查詢。

SELECT se.user_id, se.subscription_type, se.timestamp,
    MAX(se1.timestamp) AS Converted_from_TRIAL
    
FROM subscription_event AS se

LEFT JOIN subscription_event AS se1 ON se.user_id = se1.user_id AND se1.timestamp < se.timestamp AND se1.subscription_type = 'TRIAL'

GROUP BY se.user_id, se.subscription_type, se.timestamp

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM