MySQL - 日期差异和标志

MySQL - Date Difference and Flags

我是 MySQL 的新手,目前正在处理包含三列的 table:trx_id, user_id, last_activity。 (客户流失分析)

tbl_activity:

table 捕获 activity 用户。我发现很难完成两项任务。

1) 我想通过 SQL query

查看两个新列

想要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

#SQL Fiddle

试试这个

输出:

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