我有一个嗅探数据包的路由器,并将设备ID,信号强度和时间戳存储在MySQL数据库中。这些都存储在一个表中,字段为:device_id,signal_strength和time_stamp。每条记录代表一个接收的数据包 由于我从多个源接收数据包,因此数据库中的记录按随机顺序排列。
我想计算从每个mac地址的第一个数据包到我收到的最后一个数据包的时间。所以我不知道设备的测量时间。这是我被困住了。我不知道如何计算或查询这个。也许我的数据库设计不是最优的?
编辑:示例数据
record_id device_id date time signal_strength
32 2 2014-02-20 10:52:52 -9
33 2 2014-02-20 10:52:52 -14
34 2 2014-02-20 10:52:53 -9
35 2 2014-02-20 10:52:53 -10
36 2 2014-02-20 10:52:53 -10
37 7 2014-02-20 10:52:53 -53
38 2 2014-02-20 10:52:53 -15
39 2 2014-02-20 10:52:53 -9
40 2 2014-02-20 10:52:53 -9
41 2 2014-02-20 10:52:53 -10
42 2 2014-02-20 10:52:54 -13
43 2 2014-02-20 10:52:54 -9
44 7 2014-02-20 10:52:54 -60
45 2 2014-02-20 10:52:54 -10
46 2 2014-02-20 10:52:54 -9
47 2 2014-02-20 10:52:54 -9
48 2 2014-02-20 10:52:54 -10
49 2 2014-02-20 10:52:55 -13
50 7 2014-02-20 10:52:55 -56
51 2 2014-02-20 10:52:55 -15
52 7 2014-02-20 10:52:55 -58
53 2 2014-02-20 10:52:55 -26
54 2 2014-02-20 10:52:55 -14
55 2 2014-02-20 10:52:56 -13
56 2 2014-02-20 10:52:56 -12
57 2 2014-02-20 10:52:56 -9
58 2 2014-02-20 10:52:56 -11
59 2 2014-02-20 10:52:56 -13
60 7 2014-02-20 10:52:56 -55
61 2 2014-02-20 10:52:57 -14
我正在尝试按device_id
和time
订购,但我不知道如何询问每台设备的最后一次。此外,设备每天可以测量不止一次。换句话说,设备可以多次进入嗅探场。因此,我需要区分它是第一次进入现场还是第二次进入。
谢谢
答案 0 :(得分:1)
首先,您可以使用MIN
和MAX
来获取开始时间和结束时间
SELECT Device_id
,MIN(concat(date,' ',time)) as StartTime
,MAX(concat(date,' ',time)) as EndTime
,MIN(TIMESTAMP(date,time)) as StartTime2
,MAX(TIMESTAMP(date,time)) as EndTime2
From MyTable
Group by Device_ID
比所有你需要的是计算开始和结束时间之间的差异。为此,您可以使用TIMEDIFF
功能。有关所有这些功能的完整文档http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_timestamp