MySQL - 日期差异和标志
MySQL - Date Difference and Flags
我是 MySQL
的新手,目前正在处理包含三列的 table:trx_id, user_id, last_activity
。 (客户流失分析)
tbl_activity:
table 捕获 activity 用户。我发现很难完成两项任务。
1) 我想通过 SQL query
查看两个新列
- 后续交易之间的日期差异。
- 根据条件标记 > 30 天。
想要table:
2) 本研究的目标之一是确定客户流失的时间(日期)。理想情况下,我的情况是自上次 activity 以来的第 31 天。有什么办法可以到达这个日期吗?
我是 SQL 的新手,发现很难解决 SQL 对上述任务的查询。
试试这个:
对于 SQL 服务器:
CREATE TABLE #tbl_activity(Trx_ID INT, User_Id INT, Last_Activity DATETIME)
INSERT INTO #tbl_activity VALUES(1,1100,'2015-06-08')
INSERT INTO #tbl_activity VALUES(2,1100,'2015-06-10')
INSERT INTO #tbl_activity VALUES(3,1100,'2015-06-10')
INSERT INTO #tbl_activity VALUES(4,1100,'2015-06-12')
INSERT INTO #tbl_activity VALUES(5,1100,'2015-06-13')
INSERT INTO #tbl_activity VALUES(6,1100,'2015-06-14')
INSERT INTO #tbl_activity VALUES(7,1100,'2015-09-25')
SELECT T1.Trx_ID, T1.User_Id, T1.Last_Activity
,DATEDIFF(DAY, T1.Last_Activity, T2.Last_Activity) days_Diff
,CASE WHEN DATEDIFF(DAY, T1.Last_Activity, T2.Last_Activity) >30 THEN 1 ELSE 0 END Flag
FROM #tbl_activity T1
LEFT JOIN #tbl_activity T2 ON T1.Trx_ID = T2.Trx_ID-1
DROP TABLE #tbl_activity
对于MySQL:
CREATE TABLE tbl_activity(Trx_ID INT, User_Id INT, Last_Activity DATETIME)
INSERT INTO tbl_activity VALUES(1,1100,'2015-06-08')
INSERT INTO tbl_activity VALUES(2,1100,'2015-06-10')
INSERT INTO tbl_activity VALUES(3,1100,'2015-06-10')
INSERT INTO tbl_activity VALUES(4,1100,'2015-06-12')
INSERT INTO tbl_activity VALUES(5,1100,'2015-06-13')
INSERT INTO tbl_activity VALUES(6,1100,'2015-06-14')
INSERT INTO tbl_activity VALUES(7,1100,'2015-09-25')
SELECT T1.Trx_ID, T1.User_Id, T1.Last_Activity
,DATEDIFF(T2.Last_Activity, T1.Last_Activity) days_Diff
,CASE WHEN DATEDIFF(T2.Last_Activity, T1.Last_Activity) >30 THEN 1 ELSE 0 END Flag
FROM tbl_activity T1
LEFT JOIN tbl_activity T2 ON T1.Trx_ID = T2.Trx_ID-1
DROP TABLE tbl_activity
试试这个
输出:
Trx_ID User_Id Last_Activity days_Diff Flag
1 1100 2015-06-08 00:00:00.000 2 0
2 1100 2015-06-10 00:00:00.000 0 0
3 1100 2015-06-10 00:00:00.000 2 0
4 1100 2015-06-12 00:00:00.000 1 0
5 1100 2015-06-13 00:00:00.000 1 0
6 1100 2015-06-14 00:00:00.000 103 1
7 1100 2015-09-25 00:00:00.000 NULL 0
我是 MySQL
的新手,目前正在处理包含三列的 table:trx_id, user_id, last_activity
。 (客户流失分析)
tbl_activity:
table 捕获 activity 用户。我发现很难完成两项任务。
1) 我想通过 SQL query
查看两个新列- 后续交易之间的日期差异。
- 根据条件标记 > 30 天。
想要table:
2) 本研究的目标之一是确定客户流失的时间(日期)。理想情况下,我的情况是自上次 activity 以来的第 31 天。有什么办法可以到达这个日期吗?
我是 SQL 的新手,发现很难解决 SQL 对上述任务的查询。
试试这个:
对于 SQL 服务器:
CREATE TABLE #tbl_activity(Trx_ID INT, User_Id INT, Last_Activity DATETIME)
INSERT INTO #tbl_activity VALUES(1,1100,'2015-06-08')
INSERT INTO #tbl_activity VALUES(2,1100,'2015-06-10')
INSERT INTO #tbl_activity VALUES(3,1100,'2015-06-10')
INSERT INTO #tbl_activity VALUES(4,1100,'2015-06-12')
INSERT INTO #tbl_activity VALUES(5,1100,'2015-06-13')
INSERT INTO #tbl_activity VALUES(6,1100,'2015-06-14')
INSERT INTO #tbl_activity VALUES(7,1100,'2015-09-25')
SELECT T1.Trx_ID, T1.User_Id, T1.Last_Activity
,DATEDIFF(DAY, T1.Last_Activity, T2.Last_Activity) days_Diff
,CASE WHEN DATEDIFF(DAY, T1.Last_Activity, T2.Last_Activity) >30 THEN 1 ELSE 0 END Flag
FROM #tbl_activity T1
LEFT JOIN #tbl_activity T2 ON T1.Trx_ID = T2.Trx_ID-1
DROP TABLE #tbl_activity
对于MySQL:
CREATE TABLE tbl_activity(Trx_ID INT, User_Id INT, Last_Activity DATETIME)
INSERT INTO tbl_activity VALUES(1,1100,'2015-06-08')
INSERT INTO tbl_activity VALUES(2,1100,'2015-06-10')
INSERT INTO tbl_activity VALUES(3,1100,'2015-06-10')
INSERT INTO tbl_activity VALUES(4,1100,'2015-06-12')
INSERT INTO tbl_activity VALUES(5,1100,'2015-06-13')
INSERT INTO tbl_activity VALUES(6,1100,'2015-06-14')
INSERT INTO tbl_activity VALUES(7,1100,'2015-09-25')
SELECT T1.Trx_ID, T1.User_Id, T1.Last_Activity
,DATEDIFF(T2.Last_Activity, T1.Last_Activity) days_Diff
,CASE WHEN DATEDIFF(T2.Last_Activity, T1.Last_Activity) >30 THEN 1 ELSE 0 END Flag
FROM tbl_activity T1
LEFT JOIN tbl_activity T2 ON T1.Trx_ID = T2.Trx_ID-1
DROP TABLE tbl_activity
试试这个
输出:
Trx_ID User_Id Last_Activity days_Diff Flag
1 1100 2015-06-08 00:00:00.000 2 0
2 1100 2015-06-10 00:00:00.000 0 0
3 1100 2015-06-10 00:00:00.000 2 0
4 1100 2015-06-12 00:00:00.000 1 0
5 1100 2015-06-13 00:00:00.000 1 0
6 1100 2015-06-14 00:00:00.000 103 1
7 1100 2015-09-25 00:00:00.000 NULL 0