1
0
mirror of https://gitee.com/coder-xiaomo/leetcode-problemset synced 2025-10-23 22:08:58 +08:00
Code Issues Projects Releases Wiki Activity GitHub Gitee
Files
leetcode-problemset/leetcode-cn/originData/find-churn-risk-customers.json
2025-10-19 23:12:56 +08:00

96 lines
23 KiB
JSON
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{
"data": {
"question": {
"questionId": "4103",
"questionFrontendId": "3716",
"categoryTitle": "Database",
"boundTopicId": 3805185,
"title": "Find Churn Risk Customers",
"titleSlug": "find-churn-risk-customers",
"content": "<p>Table: <code>subscription_events</code></p>\n\n<pre>\n+------------------+---------+\n| Column Name | Type | \n+------------------+---------+\n| event_id | int |\n| user_id | int |\n| event_date | date |\n| event_type | varchar |\n| plan_name | varchar |\n| monthly_amount | decimal |\n+------------------+---------+\nevent_id is the unique identifier for this table.\nevent_type can be start, upgrade, downgrade, or cancel.\nplan_name can be basic, standard, premium, or NULL (when event_type is cancel).\nmonthly_amount represents the monthly subscription cost after this event.\nFor cancel events, monthly_amount is 0.\n</pre>\n\n<p>Write a solution to <strong>Find Churn Risk Customers</strong> - users who show warning signs before churning. A user is considered <b>churn risk customer</b>&nbsp;if they meet ALL the following criteria:</p>\n\n<ul>\n\t<li>Currently have an <strong>active subscription</strong> (their last event is not cancel).</li>\n\t<li>Have performed <strong>at least one</strong> downgrade in their subscription history.</li>\n\t<li>Their <strong>current plan revenue</strong> is less than <code>50%</code> of their historical maximum plan revenue.</li>\n\t<li>Have been a subscriber for <strong>at least</strong> <code>60</code> days.</li>\n</ul>\n\n<p>Return <em>the result table&nbsp;ordered by</em> <code>days_as_subscriber</code> <em>in <strong>descending</strong> order, then by</em> <code>user_id</code> <em>in <strong>ascending</strong> order</em>.</p>\n\n<p>The result format is in the following example.</p>\n\n<p>&nbsp;</p>\n<p><strong class=\"example\">Example:</strong></p>\n\n<div class=\"example-block\">\n<p><strong>Input:</strong></p>\n\n<p>subscription_events table:</p>\n\n<pre class=\"example-io\">\n+----------+---------+------------+------------+-----------+----------------+\n| event_id | user_id | event_date | event_type | plan_name | monthly_amount |\n+----------+---------+------------+------------+-----------+----------------+\n| 1 | 501 | 2024-01-01 | start | premium | 29.99 |\n| 2 | 501 | 2024-02-15 | downgrade | standard | 19.99 |\n| 3 | 501 | 2024-03-20 | downgrade | basic | 9.99 |\n| 4 | 502 | 2024-01-05 | start | standard | 19.99 |\n| 5 | 502 | 2024-02-10 | upgrade | premium | 29.99 |\n| 6 | 502 | 2024-03-15 | downgrade | basic | 9.99 |\n| 7 | 503 | 2024-01-10 | start | basic | 9.99 |\n| 8 | 503 | 2024-02-20 | upgrade | standard | 19.99 |\n| 9 | 503 | 2024-03-25 | upgrade | premium | 29.99 |\n| 10 | 504 | 2024-01-15 | start | premium | 29.99 |\n| 11 | 504 | 2024-03-01 | downgrade | standard | 19.99 |\n| 12 | 504 | 2024-03-30 | cancel | NULL | 0.00 |\n| 13 | 505 | 2024-02-01 | start | basic | 9.99 |\n| 14 | 505 | 2024-02-28 | upgrade | standard | 19.99 |\n| 15 | 506 | 2024-01-20 | start | premium | 29.99 |\n| 16 | 506 | 2024-03-10 | downgrade | basic | 9.99 |\n+----------+---------+------------+------------+-----------+----------------+\n</pre>\n\n<p><strong>Output:</strong></p>\n\n<pre class=\"example-io\">\n+----------+--------------+------------------------+-----------------------+--------------------+\n| user_id | current_plan | current_monthly_amount | max_historical_amount | days_as_subscriber |\n+----------+--------------+------------------------+-----------------------+--------------------+\n| 501 | basic | 9.99 | 29.99 | 79 |\n| 502 | basic | 9.99 | 29.99 | 69 |\n+----------+--------------+------------------------+-----------------------+--------------------+\n</pre>\n\n<p><strong>Explanation:</strong></p>\n\n<ul>\n\t<li><strong>User 501</strong>:\n\n\t<ul>\n\t\t<li>Currently active: Last event is downgrade&nbsp;to basic (not cancelled)&nbsp;</li>\n\t\t<li>Has downgrades: Yes, 2 downgrades in history&nbsp;</li>\n\t\t<li>Current revenue (9.99) vs max (29.99): 9.99/29.99 = 33.3% (less than 50%)&nbsp;</li>\n\t\t<li>Days as subscriber: Jan 1 to Mar 20 = 79 days (at least 60)&nbsp;</li>\n\t\t<li>Result: <strong>Churn Risk Customer</strong></li>\n\t</ul>\n\t</li>\n\t<li><strong>User 502</strong>:\n\t<ul>\n\t\t<li>Currently active: Last event is downgrade&nbsp;to basic (not cancelled)&nbsp;</li>\n\t\t<li>Has downgrades: Yes, 1 downgrade in history&nbsp;</li>\n\t\t<li>Current revenue (9.99) vs max (29.99): 9.99/29.99 = 33.3% (less than 50%)&nbsp;</li>\n\t\t<li>Days as subscriber: Jan 5 to Mar 15 = 70 days (at least 60)&nbsp;</li>\n\t\t<li>Result: <strong>Churn Risk Customer</strong></li>\n\t</ul>\n\t</li>\n\t<li><strong>User 503</strong>:\n\t<ul>\n\t\t<li>Currently active: Last event is upgrade&nbsp;to premium (not cancelled)&nbsp;</li>\n\t\t<li>Has downgrades: No downgrades in history&nbsp;</li>\n\t\t<li>Result: <strong>Not at-risk</strong> (no downgrade history)</li>\n\t</ul>\n\t</li>\n\t<li><strong>User 504</strong>:\n\t<ul>\n\t\t<li>Currently active: Last event is cancel</li>\n\t\t<li>Result: <strong>Not at-risk</strong> (subscription cancelled)</li>\n\t</ul>\n\t</li>\n\t<li><strong>User 505</strong>:\n\t<ul>\n\t\t<li>Currently active: Last event is &#39;upgrade&#39; to standard (not cancelled)&nbsp;</li>\n\t\t<li>Has downgrades: No downgrades in history&nbsp;</li>\n\t\t<li>Result: <strong>Not at-risk</strong> (no downgrade history)</li>\n\t</ul>\n\t</li>\n\t<li><strong>User 506</strong>:\n\t<ul>\n\t\t<li>Currently active: Last event is downgrade&nbsp;to basic (not cancelled)&nbsp;</li>\n\t\t<li>Has downgrades: Yes, 1 downgrade in history&nbsp;</li>\n\t\t<li>Current revenue (9.99) vs max (29.99): 9.99/29.99 = 33.3% (less than 50%)&nbsp;</li>\n\t\t<li>Days as subscriber: Jan 20 to Mar 10 = 50 days (less than 60)&nbsp;</li>\n\t\t<li>Result: <strong>Not at-risk</strong> (insufficient subscription duration)</li>\n\t</ul>\n\t</li>\n</ul>\n\n<p>Result table is ordered by days_as_subscriber DESC, then user_id ASC.</p>\n\n<p><strong>Note:</strong> days_as_subscriber is calculated from the first event date to the last event date for each user.</p>\n</div>\n",
"translatedTitle": "寻找流失风险客户",
"translatedContent": "<p>表:<code>subscription_events</code></p>\n\n<pre>\n+------------------+---------+\n| Column Name | Type | \n+------------------+---------+\n| event_id | int |\n| user_id | int |\n| event_date | date |\n| event_type | varchar |\n| plan_name | varchar |\n| monthly_amount | decimal |\n+------------------+---------+\nevent_id 是这张表的唯一主键。\nevent_type 可以是 startupgradedowngrade 或 cancel。\nplan_name 可以是 basicstandardpremium 或 NULL当 event_type 是 cancel。\nmonthly_amount 表示此次事件后的月度订阅费用。\n对于 cancel 的事件monthly_amount 为 0。\n</pre>\n\n<p>编写一个解决方案来 <strong>寻找流失风险用户</strong>&nbsp;- 出现预流失信号的用户。如果用户符合以下所有条件,则被视为 <strong>有流失风险</strong> 的客户:</p>\n\n<ul>\n\t<li>目前有 <strong>有效的订阅</strong>(他们的最后事件不是 cancel。</li>\n\t<li>已在其订阅历史中 <strong>至少进行过一次</strong> 降级。</li>\n\t<li>他们 <strong>目前的订阅费用</strong> 低于历史最高订阅费用的 <code>50%</code>。</li>\n\t<li>已订阅 <strong>至少</strong> <code>60</code> 天。</li>\n</ul>\n\n<p>返回结果表按&nbsp;<code>days_as_subscriber</code> <strong>降序</strong>&nbsp;排序,然后按&nbsp;<code>user_id</code> <strong>升序&nbsp;</strong>排序。</p>\n\n<p>结果格式如下所示。</p>\n\n<p>&nbsp;</p>\n\n<p><strong class=\"example\">示例:</strong></p>\n\n<div class=\"example-block\">\n<p><strong>输入:</strong></p>\n\n<p>subscription_events 表:</p>\n\n<pre class=\"example-io\">\n+----------+---------+------------+------------+-----------+----------------+\n| event_id | user_id | event_date | event_type | plan_name | monthly_amount |\n+----------+---------+------------+------------+-----------+----------------+\n| 1 | 501 | 2024-01-01 | start | premium | 29.99 |\n| 2 | 501 | 2024-02-15 | downgrade | standard | 19.99 |\n| 3 | 501 | 2024-03-20 | downgrade | basic | 9.99 |\n| 4 | 502 | 2024-01-05 | start | standard | 19.99 |\n| 5 | 502 | 2024-02-10 | upgrade | premium | 29.99 |\n| 6 | 502 | 2024-03-15 | downgrade | basic | 9.99 |\n| 7 | 503 | 2024-01-10 | start | basic | 9.99 |\n| 8 | 503 | 2024-02-20 | upgrade | standard | 19.99 |\n| 9 | 503 | 2024-03-25 | upgrade | premium | 29.99 |\n| 10 | 504 | 2024-01-15 | start | premium | 29.99 |\n| 11 | 504 | 2024-03-01 | downgrade | standard | 19.99 |\n| 12 | 504 | 2024-03-30 | cancel | NULL | 0.00 |\n| 13 | 505 | 2024-02-01 | start | basic | 9.99 |\n| 14 | 505 | 2024-02-28 | upgrade | standard | 19.99 |\n| 15 | 506 | 2024-01-20 | start | premium | 29.99 |\n| 16 | 506 | 2024-03-10 | downgrade | basic | 9.99 |\n+----------+---------+------------+------------+-----------+----------------+\n</pre>\n\n<p><strong>输出:</strong></p>\n\n<pre class=\"example-io\">\n+----------+--------------+------------------------+-----------------------+--------------------+\n| user_id | current_plan | current_monthly_amount | max_historical_amount | days_as_subscriber |\n+----------+--------------+------------------------+-----------------------+--------------------+\n| 501 | basic | 9.99 | 29.99 | 79 |\n| 502 | basic | 9.99 | 29.99 | 69 |\n+----------+--------------+------------------------+-----------------------+--------------------+\n</pre>\n\n<p><strong>解释:</strong></p>\n\n<ul>\n\t<li><strong>用户 501</strong>\n\n\t<ul>\n\t\t<li>当前订阅有效:最近一次事件是降级到基础(未取消)</li>\n\t\t<li>有降级记录:是,历史上有 2 次降级</li>\n\t\t<li>当前订阅9.99vs 最大订阅29.999.99/29.99 = 33.3%(少于 50%</li>\n\t\t<li>订阅天数1 月 1 日到 5 月 20 日 = 79 天(至少 60 天)</li>\n\t\t<li>结果:<strong>流失风险客户</strong></li>\n\t</ul>\n\t</li>\n\t<li><strong>用户 502</strong>\n\t<ul>\n\t\t<li>当前订阅有效:最近一次事件是降级到基础(未取消)</li>\n\t\t<li>有降级记录:是,历史上有 1 次降级</li>\n\t\t<li>当前订阅9.99vs 最大订阅29.999.99/29.99 = 33.3%(少于 50%</li>\n\t\t<li>订阅天数1 月&nbsp;5 日到 5 月 15 日 = 70 天(至少 60 天)</li>\n\t\t<li>结果:<strong>流失风险客户</strong></li>\n\t</ul>\n\t</li>\n\t<li><strong>用户 503</strong>\n\t<ul>\n\t\t<li>当前订阅有效:最近一次事件是升级到高级(未取消)</li>\n\t\t<li>有降级记录:历史上没有降级</li>\n\t\t<li>结果:<strong>无风险客户</strong>(没有降级历史)</li>\n\t</ul>\n\t</li>\n\t<li><strong>用户 504</strong>\n\t<ul>\n\t\t<li>当前订阅有效:最近一次事件是取消</li>\n\t\t<li>结果:<strong>无风险客户</strong>(已取消订阅)</li>\n\t</ul>\n\t</li>\n\t<li><strong>用户 505</strong>\n\t<ul>\n\t\t<li>当前订阅有效:最近一次事件是升级到标准(未取消)</li>\n\t\t<li>有降级记录:历史上没有降级</li>\n\t\t<li>结果:<strong>无风险客户</strong>(没有降级历史)</li>\n\t</ul>\n\t</li>\n\t<li><strong>用户 506</strong>\n\t<ul>\n\t\t<li>当前订阅有效:最近一次事件是降级到标准(未取消)</li>\n\t\t<li>有降级记录:是,历史上有 1 次降级</li>\n\t\t<li>当前订阅9.99vs 最大订阅29.999.99/29.99 = 33.3%(少于 50%</li>\n\t\t<li>订阅天数1 月&nbsp;20 日到 5 月 10 日 = 50 天(少于 60 天)</li>\n\t\t<li>结果:<strong>无风险客户</strong>(订阅时长不足)</li>\n\t</ul>\n\t</li>\n</ul>\n\n<p>结果表按 days_as_subscriber 降序排序,然后按&nbsp;user_id 升序排序。</p>\n\n<p><strong>注意:</strong>days_as_subscriber 按照每个用户的第一个事件日期到最后一个事件日期进行计算。</p>\n</div>\n",
"isPaidOnly": false,
"difficulty": "Medium",
"likes": 0,
"dislikes": 0,
"isLiked": null,
"similarQuestions": "[]",
"contributors": [],
"langToValidPlayground": "{\"cpp\": false, \"java\": false, \"python3\": false, \"python\": false, \"javascript\": false, \"typescript\": false, \"csharp\": false, \"c\": false, \"golang\": false, \"kotlin\": false, \"swift\": false, \"rust\": false, \"ruby\": false, \"php\": false, \"dart\": false, \"scala\": false, \"elixir\": false, \"erlang\": false, \"racket\": false, \"cangjie\": false, \"bash\": false, \"html\": false, \"pythonml\": false, \"react\": false, \"vanillajs\": false, \"mysql\": false, \"mssql\": false, \"postgresql\": false, \"oraclesql\": false, \"pythondata\": false}",
"topicTags": [],
"companyTagStats": null,
"codeSnippets": [
{
"lang": "MySQL",
"langSlug": "mysql",
"code": "# Write your MySQL query statement below",
"__typename": "CodeSnippetNode"
},
{
"lang": "MS SQL Server",
"langSlug": "mssql",
"code": "/* Write your T-SQL query statement below */",
"__typename": "CodeSnippetNode"
},
{
"lang": "PostgreSQL",
"langSlug": "postgresql",
"code": "-- Write your PostgreSQL query statement below",
"__typename": "CodeSnippetNode"
},
{
"lang": "Oracle",
"langSlug": "oraclesql",
"code": "/* Write your PL/SQL query statement below */",
"__typename": "CodeSnippetNode"
},
{
"lang": "Pandas",
"langSlug": "pythondata",
"code": "import pandas as pd\n\ndef find_churn_risk_customers(subscription_events: pd.DataFrame) -> pd.DataFrame:\n ",
"__typename": "CodeSnippetNode"
}
],
"stats": "{\"totalAccepted\": \"124\", \"totalSubmission\": \"165\", \"totalAcceptedRaw\": 124, \"totalSubmissionRaw\": 165, \"acRate\": \"75.2%\"}",
"hints": [],
"solution": null,
"status": null,
"sampleTestCase": "{\"headers\":{\"subscription_events\":[\"event_id\",\"user_id\",\"event_date\",\"event_type\",\"plan_name\",\"monthly_amount\"]},\"rows\":{\"subscription_events\":[[1,501,\"2024-01-01\",\"start\",\"premium\",29.99],[2,501,\"2024-02-15\",\"downgrade\",\"standard\",19.99],[3,501,\"2024-03-20\",\"downgrade\",\"basic\",9.99],[4,502,\"2024-01-05\",\"start\",\"standard\",19.99],[5,502,\"2024-02-10\",\"upgrade\",\"premium\",29.99],[6,502,\"2024-03-15\",\"downgrade\",\"basic\",9.99],[7,503,\"2024-01-10\",\"start\",\"basic\",9.99],[8,503,\"2024-02-20\",\"upgrade\",\"standard\",19.99],[9,503,\"2024-03-25\",\"upgrade\",\"premium\",29.99],[10,504,\"2024-01-15\",\"start\",\"premium\",29.99],[11,504,\"2024-03-01\",\"downgrade\",\"standard\",19.99],[12,504,\"2024-03-30\",\"cancel\",null,0.00],[13,505,\"2024-02-01\",\"start\",\"basic\",9.99],[14,505,\"2024-02-28\",\"upgrade\",\"standard\",19.99],[15,506,\"2024-01-20\",\"start\",\"premium\",29.99],[16,506,\"2024-03-10\",\"downgrade\",\"basic\",9.99]]}}",
"metaData": "{\"mysql\":[\"CREATE TABLE if not exists subscription_events (\\n event_id INT,\\n user_id INT,\\n event_date DATE,\\n event_type VARCHAR(20),\\n plan_name VARCHAR(20),\\n monthly_amount DECIMAL(10,2)\\n)\"],\"mssql\":[\"CREATE TABLE subscription_events (\\n event_id INT,\\n user_id INT,\\n event_date DATE,\\n event_type VARCHAR(20),\\n plan_name VARCHAR(20),\\n monthly_amount DECIMAL(10,2)\\n)\"],\"oraclesql\":[\"CREATE TABLE subscription_events (\\n event_id NUMBER,\\n user_id NUMBER,\\n event_date DATE,\\n event_type VARCHAR2(20),\\n plan_name VARCHAR2(20),\\n monthly_amount NUMBER(10,2)\\n)\",\"ALTER SESSION SET nls_date_format='YYYY-MM-DD'\"],\"database\":true,\"name\":\"find_churn_risk_customers\",\"postgresql\":[\"CREATE TABLE IF NOT EXISTS subscription_events (\\n event_id INT PRIMARY KEY,\\n user_id INT NOT NULL,\\n event_date DATE NOT NULL,\\n event_type VARCHAR(20) NOT NULL,\\n plan_name VARCHAR(20),\\n monthly_amount NUMERIC(10,2) NOT NULL\\n);\\n\"],\"pythondata\":[\"subscription_events = pd.DataFrame({\\n \\\"event_id\\\": pd.Series(dtype=\\\"int\\\"),\\n \\\"user_id\\\": pd.Series(dtype=\\\"int\\\"),\\n \\\"event_date\\\": pd.Series(dtype=\\\"datetime64[ns]\\\"), # corresponds to SQL DATE\\n \\\"event_type\\\": pd.Series(dtype=\\\"string\\\"),\\n \\\"plan_name\\\": pd.Series(dtype=\\\"string\\\"), # can be NULL for cancel events\\n \\\"monthly_amount\\\": pd.Series(dtype=\\\"float\\\") # corresponds to DECIMAL(10,2)\\n})\"],\"database_schema\":{\"subscription_events\":{\"event_id\":\"INT\",\"user_id\":\"INT\",\"event_date\":\"DATE\",\"event_type\":\"VARCHAR(20)\",\"plan_name\":\"VARCHAR(20)\",\"monthly_amount\":\"DECIMAL(10, 2)\"}}}",
"judgerAvailable": true,
"judgeType": "large",
"mysqlSchemas": [
"CREATE TABLE if not exists subscription_events (\n event_id INT,\n user_id INT,\n event_date DATE,\n event_type VARCHAR(20),\n plan_name VARCHAR(20),\n monthly_amount DECIMAL(10,2)\n)",
"Truncate table subscription_events",
"insert into subscription_events (event_id, user_id, event_date, event_type, plan_name, monthly_amount) values ('1', '501', '2024-01-01', 'start', 'premium', '29.99')",
"insert into subscription_events (event_id, user_id, event_date, event_type, plan_name, monthly_amount) values ('2', '501', '2024-02-15', 'downgrade', 'standard', '19.99')",
"insert into subscription_events (event_id, user_id, event_date, event_type, plan_name, monthly_amount) values ('3', '501', '2024-03-20', 'downgrade', 'basic', '9.99')",
"insert into subscription_events (event_id, user_id, event_date, event_type, plan_name, monthly_amount) values ('4', '502', '2024-01-05', 'start', 'standard', '19.99')",
"insert into subscription_events (event_id, user_id, event_date, event_type, plan_name, monthly_amount) values ('5', '502', '2024-02-10', 'upgrade', 'premium', '29.99')",
"insert into subscription_events (event_id, user_id, event_date, event_type, plan_name, monthly_amount) values ('6', '502', '2024-03-15', 'downgrade', 'basic', '9.99')",
"insert into subscription_events (event_id, user_id, event_date, event_type, plan_name, monthly_amount) values ('7', '503', '2024-01-10', 'start', 'basic', '9.99')",
"insert into subscription_events (event_id, user_id, event_date, event_type, plan_name, monthly_amount) values ('8', '503', '2024-02-20', 'upgrade', 'standard', '19.99')",
"insert into subscription_events (event_id, user_id, event_date, event_type, plan_name, monthly_amount) values ('9', '503', '2024-03-25', 'upgrade', 'premium', '29.99')",
"insert into subscription_events (event_id, user_id, event_date, event_type, plan_name, monthly_amount) values ('10', '504', '2024-01-15', 'start', 'premium', '29.99')",
"insert into subscription_events (event_id, user_id, event_date, event_type, plan_name, monthly_amount) values ('11', '504', '2024-03-01', 'downgrade', 'standard', '19.99')",
"insert into subscription_events (event_id, user_id, event_date, event_type, plan_name, monthly_amount) values ('12', '504', '2024-03-30', 'cancel', NULL, '0.0')",
"insert into subscription_events (event_id, user_id, event_date, event_type, plan_name, monthly_amount) values ('13', '505', '2024-02-01', 'start', 'basic', '9.99')",
"insert into subscription_events (event_id, user_id, event_date, event_type, plan_name, monthly_amount) values ('14', '505', '2024-02-28', 'upgrade', 'standard', '19.99')",
"insert into subscription_events (event_id, user_id, event_date, event_type, plan_name, monthly_amount) values ('15', '506', '2024-01-20', 'start', 'premium', '29.99')",
"insert into subscription_events (event_id, user_id, event_date, event_type, plan_name, monthly_amount) values ('16', '506', '2024-03-10', 'downgrade', 'basic', '9.99')"
],
"enableRunCode": true,
"envInfo": "{\"mysql\":[\"MySQL\",\"<p>\\u7248\\u672c\\uff1a<code>MySQL 8.0<\\/code><\\/p>\"],\"mssql\":[\"MS SQL Server\",\"<p>mssql server 2019.<\\/p>\"],\"oraclesql\":[\"Oracle\",\"<p>Oracle Sql 11.2.<\\/p>\"],\"pythondata\":[\"Pandas\",\"<p>Python 3.10 with Pandas 2.2.2 and NumPy 1.26.4<\\/p>\"],\"postgresql\":[\"PostgreSQL\",\"<p>PostgreSQL 16<\\/p>\"]}",
"book": null,
"isSubscribed": false,
"isDailyQuestion": false,
"dailyRecordStatus": null,
"editorType": "CKEDITOR",
"ugcQuestionId": null,
"style": "LEETCODE",
"exampleTestcases": "{\"headers\":{\"subscription_events\":[\"event_id\",\"user_id\",\"event_date\",\"event_type\",\"plan_name\",\"monthly_amount\"]},\"rows\":{\"subscription_events\":[[1,501,\"2024-01-01\",\"start\",\"premium\",29.99],[2,501,\"2024-02-15\",\"downgrade\",\"standard\",19.99],[3,501,\"2024-03-20\",\"downgrade\",\"basic\",9.99],[4,502,\"2024-01-05\",\"start\",\"standard\",19.99],[5,502,\"2024-02-10\",\"upgrade\",\"premium\",29.99],[6,502,\"2024-03-15\",\"downgrade\",\"basic\",9.99],[7,503,\"2024-01-10\",\"start\",\"basic\",9.99],[8,503,\"2024-02-20\",\"upgrade\",\"standard\",19.99],[9,503,\"2024-03-25\",\"upgrade\",\"premium\",29.99],[10,504,\"2024-01-15\",\"start\",\"premium\",29.99],[11,504,\"2024-03-01\",\"downgrade\",\"standard\",19.99],[12,504,\"2024-03-30\",\"cancel\",null,0.00],[13,505,\"2024-02-01\",\"start\",\"basic\",9.99],[14,505,\"2024-02-28\",\"upgrade\",\"standard\",19.99],[15,506,\"2024-01-20\",\"start\",\"premium\",29.99],[16,506,\"2024-03-10\",\"downgrade\",\"basic\",9.99]]}}",
"__typename": "QuestionNode"
}
}
}