Php 计算当前行和上一行之间的时差
我的web应用程序有下表,我想添加另一列以获取当前行和前一行之间的时间差。我怎样才能做到呢 目前,这里是我从php应用程序中调用的sqlPhp 计算当前行和上一行之间的时差,php,mysql,Php,Mysql,我的web应用程序有下表,我想添加另一列以获取当前行和前一行之间的时间差。我怎样才能做到呢 目前,这里是我从php应用程序中调用的sql $stmt = $db->prepare("SELECT device,lat,lon, speed, mode, DATE (`currentTime`) ,TIME_FORMAT(`currentTime`, '%H:%i:%s') FROM myTable
$stmt = $db->prepare("SELECT device,lat,lon, speed, mode, DATE (`currentTime`) ,TIME_FORMAT(`currentTime`, '%H:%i:%s')
FROM myTable
WHERE device=? limit ?");
$stmt ->bind_param('ii', $device_Number ,$limit);
$stmt ->bind_result($device, $lat, $lon, $speed, $mode, $currentDate, $currentTime);
$stmt ->execute();
这里我给出了带有日期时间差的示例数据,这里您将数据保存在两个不同的列中 因此,将日期差视为两列“时差”和“日差”
testtime
表
id date1 time1
1 2017-08-14 01:06:11
2 2017-08-14 01:09:13
3 2017-08-14 01:16:10
4 2017-08-14 01:21:00
5 2017-08-15 01:21:00
6 2017-08-15 02:13:00
Mysql查询是
SELECT A.id, A.time1, TIMESTAMPDIFF(SECOND,A.time1,B.time1) AS timedifference,
TIMESTAMPDIFF(DAY,A.date1,B.date1) AS daydifference
FROM testtime A INNER JOIN testtime B ON B.id = (A.id + 1)
ORDER BY A.id ASC
这里我给出了带有日期时间差的示例数据,这里您将数据保存在两个不同的列中 因此,将日期差视为两列“时差”和“日差”
testtime
表
id date1 time1
1 2017-08-14 01:06:11
2 2017-08-14 01:09:13
3 2017-08-14 01:16:10
4 2017-08-14 01:21:00
5 2017-08-15 01:21:00
6 2017-08-15 02:13:00
Mysql查询是
SELECT A.id, A.time1, TIMESTAMPDIFF(SECOND,A.time1,B.time1) AS timedifference,
TIMESTAMPDIFF(DAY,A.date1,B.date1) AS daydifference
FROM testtime A INNER JOIN testtime B ON B.id = (A.id + 1)
ORDER BY A.id ASC
如果存在my_表,则删除表;
创建表格my_表格
(设备INT不为空)
,lat DECIMAL(10,6)不为空
,lon十进制(10,6)不为空
,速度十进制(5,2)
,模式INT不为空
,dt DATETIME不为空
,主键(设备,dt)
);
在my_表中插入值
(117,1.415738,103.82360,28.8,3,'2017-07-12 22:07:40'),
(117,1.424894,103.82561,31.9,3,'2017-07-12 22:08:41'),
(117,1.429965,103.82674,10.9,3,'2017-07-12 22:09:47'),
(117,1.430308,103.82873, 5.2,3,'2017-07-12 22:10:47'),
(117,1.430542,103.83278,13.9,3,'2017-07-12 22:11:48'),
(117,1.430537,103.83325, 3.2,3,'2017-07-12 22:12:47');
选择x*
,秒到秒时间(时间到秒(x.dt)-时间到秒(最大(y.dt)))差异
从我的表x
左边
加入我的桌子
在y.device=x.device上
y.dt
删除表格(如果存在我的表格);
创建表格my_表格
(设备INT不为空)
,lat DECIMAL(10,6)不为空
,lon十进制(10,6)不为空
,速度十进制(5,2)
,模式INT不为空
,dt DATETIME不为空
,主键(设备,dt)
);
在my_表中插入值
(117,1.415738,103.82360,28.8,3,'2017-07-12 22:07:40'),
(117,1.424894,103.82561,31.9,3,'2017-07-12 22:08:41'),
(117,1.429965,103.82674,10.9,3,'2017-07-12 22:09:47'),
(117,1.430308,103.82873, 5.2,3,'2017-07-12 22:10:47'),
(117,1.430542,103.83278,13.9,3,'2017-07-12 22:11:48'),
(117,1.430537,103.83325, 3.2,3,'2017-07-12 22:12:47');
选择x*
,秒到秒时间(时间到秒(x.dt)-时间到秒(最大(y.dt)))差异
从我的表x
左边
加入我的桌子
在y.device=x.device上
y.dt
在db行中存储这样的内容似乎有点多余。你为什么要这样做?我不会存储在数据库中,而是在你真正需要的时候计算它。您可以在DB端使用DateTime:Diff或在PHP中使用DateTime:Diff执行此操作,因为我需要知道每行的时间差,以便进一步计算。步骤1:将日期和时间存储为单个实体。在DB行中存储这样的内容似乎有点多余。你为什么要这样做?我不会存储在数据库中,而是在你真正需要的时候计算它。您可以在DB端使用DateTime:Diff或在PHP中使用DateTime:Diff执行此操作,因为我需要知道每行的时间差以便进一步计算。步骤1:将日期和时间存储为单个实体。这假设存在id列,并且所述列的值是连续的。无法获取@Strawberry这假设同时存在id列和所述列的值是连续的。无法获取@草莓