从网上找了很多资料,参考了如下链接,完成了一个需求:下一行的开始时间,作为上一行开始时间的结束时间。
以下是自己做的,可以忽略
——说明如下:
——先按照设备号,用户id, book_id,阅读时间排序
,然后按照设备号分组,对组内的数据按时间依次编号
——首先last_device_num为空,
——第一行判断device_num=null,所以赋值1,并把第一行的device_num传递给last_device_num;
——第二行时,判断device_num是否等于上一行的device_num(即last_device_num),如果等,则递增,否则为1。
——第二行,纯粹是用来赋值。
UPDATE
,xxx p
,(SELECT
,,n。id,
,,n。begin_time,
,,m。begin_time end_time,
,,TIMESTAMPDIFF (
,,,第二,
,,,n。begin_time,
,,,m。begin_time
,,)interva
,从
,,(SELECT
,,,id,
,,,device_num,
,,,begin_time,
,,,如果(
,,,,@last_device_num=a.device_num
,,,,@rank:=@rank + 1,
,,,,@rank:=1
,,,)row_number,
,,,@last_device_num:=a.device_num
,,从
,,,(SELECT
,,,,*,
,,,从
,,,,xxx
,,,ORDER BY device_num,
,,,,user_id,
,,,,book_id,
,,,,begin_time ASC),
,,,(SELECT
,,,,@rownum:=0,
,,,,@last_device_num:=NULL,
,,,,@rank: b=0)) m
,,正确的JOIN
,,,(SELECT
,,,,id,
,,,,device_num,
,,,,begin_time,
,,,,如果(
,,,,,@last_device_num1=a.device_num
,,,,,@rank1:=@rank1 + 1,
,,,,,@rank1:=2
,,,,)row_number,
,,,,@last_device_num1:=a.device_num
,,,从
,,,,(SELECT
,,,,,*,
,,,,从
,,,,,xxx
,,,,ORDER BY device_num,
,,,,,user_id,
,,,,,book_id,
,,,,,begin_time ASC),
,,,,(SELECT
,,,,,@rownum1:=0,
,,,,,@last_device_num1:=NULL,
,,,,,@rank1:=1) b) n
,,,在m。row_number=n.row_number
,,,和m.device_num=n.device_num) q
设置
,p。“end_time”=问。end_time,
,p。“read_time”=q.interva
在p。id=q.id
以下是自己做的,可以忽略
——说明如下:
——先按照设备号,用户id, book_id,阅读时间排序
,然后按照设备号分组,对组内的数据按时间依次编号
——首先last_device_num为空,
——第一行判断device_num=null,所以赋值1,并把第一行的device_num传递给last_device_num;
——第二行时,判断device_num是否等于上一行的device_num(即last_device_num),如果等,则递增,否则为1。
——第二行,纯粹是用来赋值。
UPDATE
,xxx p
,(SELECT
,,n。id,
,,n。begin_time,
,,m。begin_time end_time,
,,TIMESTAMPDIFF (
,,,第二,
,,,n。begin_time,
,,,m。begin_time
,,)interva
,从
,,(SELECT
,,,id,
,,,device_num,
,,,begin_time,
,,,如果(
,,,,@last_device_num=a.device_num
,,,,@rank:=@rank + 1,
,,,,@rank:=1
,,,)row_number,
,,,@last_device_num:=a.device_num
,,从
,,,(SELECT
,,,,*,
,,,从
,,,,xxx
,,,ORDER BY device_num,
,,,,user_id,
,,,,book_id,
,,,,begin_time ASC),
,,,(SELECT
,,,,@rownum:=0,
,,,,@last_device_num:=NULL,
,,,,@rank: b=0)) m
,,正确的JOIN
,,,(SELECT
,,,,id,
,,,,device_num,
,,,,begin_time,
,,,,如果(
,,,,,@last_device_num1=a.device_num
,,,,,@rank1:=@rank1 + 1,
,,,,,@rank1:=2
,,,,)row_number,
,,,,@last_device_num1:=a.device_num
,,,从
,,,,(SELECT
,,,,,*,
,,,,从
,,,,,xxx
,,,,ORDER BY device_num,
,,,,,user_id,
,,,,,book_id,
,,,,,begin_time ASC),
,,,,(SELECT
,,,,,@rownum1:=0,
,,,,,@last_device_num1:=NULL,
,,,,,@rank1:=1) b) n
,,,在m。row_number=n.row_number
,,,和m.device_num=n.device_num) q
设置
,p。“end_time”=问。end_time,
,p。“read_time”=q.interva
在p。id=q.id