我有一个mysql表,其数据连接到日期和时间。每行都有数据和日期,如下所示:
datetime name
2009-06-25 10:00:00 jhon
2009-06-25 10:00:05 jack
2009-06-25 10:00:11 json
2009-06-25 10:00:15 jack
我的问题是我需要像第二个date1和date2那样得到不同的行:
datetime name second
2009-06-25 10:00:00 jhon 0
2009-06-25 10:00:05 jack 5
2009-06-25 10:00:11 json 6
2009-06-25 10:00:15 jack 4
谢谢
答案 0 :(得分:1)
您正在寻找的功能是LAG
,它在许多数据库中都可用作分析函数,但不在MySQL中。但是,您可以使用会话变量来模拟此功能。
SET @dt = (SELECT MIN(UNIX_TIMESTAMP(datetime)) FROM yourTable);
SELECT t.datetime,
t.name,
t.curr_dt - t.lag_dt AS second
FROM
(
SELECT @dt:=UNIX_TIMESTAMP(datetime) curr_dt,
@dt lag_dt,
datetime,
name
FROM yourTable
ORDER BY datetime, name
) t
答案 1 :(得分:1)
您可以找到最近的日期并找到如下所示的差异
select
datetime,
name,
TIME_TO_SEC(TIMEDIFF(datetime, prev_date)) diff
FROM
(
SELECT
datetime,
name,
(select datetime from tbl t1 where t1.datetime<tbl.datetime order by datetime desc limit 1) as prev_date
FROM
`tbl`
)tmp
答案 2 :(得分:0)
结果是:
[SQL] SET @dt =(SELECT MIN UNIX_TIMESTAMP(datetime)FROM gps_trs_location); [错误] 1064 - 您的SQL语法有错误;检查与您的MySQL服务器版本相对应的手册,以便在&#39;(datetime)FROM gps_trs_location附近使用正确的语法)&#39;在第1行