使用最近的时间戳组合2个表

时间:2017-04-07 02:21:09

标签: mysql sql timestamp combinations

我需要在mySQL中生成以下查询结果:

          lat1       lng1       timestamp1
canid1                                      diff_timestamp1 
canid2                                      diff_timestamp1 
canid3                                      diff_timestamp1 
......                                        .........
          lat2       lng2       timestamp2
canid1                                      diff_timestamp2 
canid2                                      diff_timestamp2 
canid3                                      diff_timestamp2 
......                                        .........

例如:

  canid      lat          lng    gps.timestamp  difference_to_gps_timestamp
  NULL   +52.220961    +9.416273     550                   NULL
0x90FE6FFE  NULL         NULL        NULL                   50
0x8CF004FE  NULL         NULL        NULL                   60
0x90FE6FFE  NULL         NULL        NULL                   90
  NULL   +52.220960    +9.416273     1550                   NULL
0x8CF004FE  NULL         NULL        NULL                   50
0x8CF004FE  NULL         NULL        NULL                   50

这甚至可能吗?也许加入variantes?

我从两个表格获得的数据gps和can。它们使用gps / can.logid = log.id连接到表日志。 问题是,每个人都可以'条目有它自己的时间戳与' gps'时间戳所以每个人都可以'参赛作品应指向最近的' gps'使用时间戳的位置。

CAN-数据:

id   canid    logid     data         timestamp
1   0x90FE6FFE  1   000000C533BB87FF    600
2   0x8CF004FE  1   007D7D9C6300F07D    610
3   0x90FE6FFE  1   000000C5E6C683FF1   640
4   0x8CF004FE  1   007D7DF03A00F07D1   1500
5   0x90FE6FFE  1   000000C59AD283FF1   1600

id:主键logid:来自日志的外键

GPS:

id    lat         lng     logid      timestamp
1   52.220961   9.416273    1            562
2   52.220960   9.416273    1           1550
3   52.220960   9.416273    1           2551
4   52.220960   9.416273    1           3546
5   52.220959   9.416274    1           4548

LOG:

id    logdate       logtime      vehicleid
1     2017-03-22    10:56:54        1
2     2017-03-22    11:32:43        1

我使用以下选项从gps获取最接近can-entry的时间戳。 3000表示可以进入的时间戳。但我不知道如何更改它以获得我想要的结果。

SELECT timestamp, ABS( timestamp - 3000 ) AS distance FROM (
(
    SELECT timestamp
    FROM `gps`
    WHERE timestamp >=3000
    ORDER BY timestamp
    LIMIT 6
) UNION ALL (
    SELECT timestamp
    FROM `gps`
    WHERE timestamp < 3000
    ORDER BY timestamp DESC
    LIMIT 6
)
) AS n
ORDER BY distance
LIMIT 1

我会很高兴你的帮助

0 个答案:

没有答案