MySQL 计算一个日期和非连续日期之间的差异
MySQL Calculate Difference between a date and non-consecutive dates
我在 mysql 中有此 table(由于法律问题,此时将显示假列和数据):
date user_id timestamp
2018-04-27 181 2018-04-27 08:28:33
2018-04-28 181 2018-04-28 03:01:22
2018-05-03 181 2018-05-03 03:04:48
2018-05-04 181 2018-05-04 03:38:12
2018-05-07 181 2018-05-07 05:03:57
2018-05-08 181 2018-05-08 03:02:43
2018-05-09 181 2018-05-09 00:19:39
2018-05-10 181 2018-05-10 00:12:45
2018-05-08 183 2018-05-08 01:46:18
2018-05-09 183 2018-05-09 01:54:40
2018-05-01 184 2018-05-01 00:15:25
2018-05-03 184 2018-05-03 02:21:48
2018-05-08 184 2018-05-08 02:40:42
2018-05-09 184 2018-05-09 01:45:29
而且我需要在第 4 列计算相同 user_id 的第一天和所有其他天之间的差异。
因此,对于第一个用户,我需要第 4 列显示在第一行“0”,然后是 1,然后是 7,这是 2018-04-27 和 2018-05-03 之间的区别等等, 当 user_id 改变时重置为 0。
我正在使用 MySQl 版本 5.6.34。
有人可以帮我吗?
谢谢,
乔治
一个选项是加入一个子查询,该子查询查找每个用户的第一个日期,然后计算每一行的日期差异:
SELECT
t1.date,
t1.user_id,
t1.timestamp,
DATEDIFF(t1.date, t2.first_date) AS diff
FROM yourTable t1
INNER JOIN
(
SELECT user_id, MIN(date) AS first_date
FROM yourTable
GROUP BY user_id
) t2
ON t1.user_id = t2.user_id
ORDER BY
t1.user_id,
t1.date;
我在 mysql 中有此 table(由于法律问题,此时将显示假列和数据):
date user_id timestamp
2018-04-27 181 2018-04-27 08:28:33
2018-04-28 181 2018-04-28 03:01:22
2018-05-03 181 2018-05-03 03:04:48
2018-05-04 181 2018-05-04 03:38:12
2018-05-07 181 2018-05-07 05:03:57
2018-05-08 181 2018-05-08 03:02:43
2018-05-09 181 2018-05-09 00:19:39
2018-05-10 181 2018-05-10 00:12:45
2018-05-08 183 2018-05-08 01:46:18
2018-05-09 183 2018-05-09 01:54:40
2018-05-01 184 2018-05-01 00:15:25
2018-05-03 184 2018-05-03 02:21:48
2018-05-08 184 2018-05-08 02:40:42
2018-05-09 184 2018-05-09 01:45:29
而且我需要在第 4 列计算相同 user_id 的第一天和所有其他天之间的差异。
因此,对于第一个用户,我需要第 4 列显示在第一行“0”,然后是 1,然后是 7,这是 2018-04-27 和 2018-05-03 之间的区别等等, 当 user_id 改变时重置为 0。
我正在使用 MySQl 版本 5.6.34。
有人可以帮我吗?
谢谢, 乔治
一个选项是加入一个子查询,该子查询查找每个用户的第一个日期,然后计算每一行的日期差异:
SELECT
t1.date,
t1.user_id,
t1.timestamp,
DATEDIFF(t1.date, t2.first_date) AS diff
FROM yourTable t1
INNER JOIN
(
SELECT user_id, MIN(date) AS first_date
FROM yourTable
GROUP BY user_id
) t2
ON t1.user_id = t2.user_id
ORDER BY
t1.user_id,
t1.date;