如何使用MYSQL将数据分成3个不同的时间(24小时)帧

时间:2011-12-11 09:40:09

标签: mysql time frame

首先,我使用SQL。只有SQL查询语言。我正在使用MYSQL工作台来提取项目所需的一些功能。我已设法提取所需的功能并将其存储在新表调用新事件中。我还把时间转换成整数。下面是使用的sql代码: -

select iphdr.cid ,iphdr.ip_dst, date(event.timestamp), convert(time(event.timestamp), unsigned) as newtime, event.signature 
from iphdr, event
where iphdr.cid = event.cid
order by event.signature;

结果(部分输出)

cid |ip_add      |date        |newtime|sig. 

480 | 3232284675 | 2011-11-19 |4328   | 1   
482 | 3232284675 | 2011-11-19 |4328   | 1   
1   | 3232284675 | 2011-11-19 |113928 | 1   
2   | 3232284675 | 2011-11-19 |235959 | 2   

因为我已将时间转换为数字;因此,newtime,现在我需要将上述查询的输出分成24小时(时间帧0,1和2)的三个不同时间范围。这是问题....当我尝试使用代码(下面)时,我不断收到1064错误代码。我认为通过使用IF然后Else,我可以轻松地将数据分成3个不同的时间范围。 我需要的输出如下

cid |ip_add      |date        |newtime|sig.   |time Frame
480 | 3232284675 | 2011-11-19 | 4328  | 1  | 0
482 | 3232284675 | 2011-11-19 |4328   | 1  | 0
1   | 3232284675 | 2011-11-19 |113928 | 1  | 1
2   | 3232284675 | 2011-11-19 |235959 | 2  | 2

下面是我使用的代码,但我不断收到错误代码1064。

 select newtime from new_event for every row
 IF newtime < 80101
  than newtime = 0
 else if newtime > 80000 and newtime  < 160101 than newtime = 1
 else if newtime >160000 than newtime = 2
 end if 

我希望我更有意义。在编程方面,我是一个完整的klutz。对不起 。 我也试图通过浏览网络来完成这项工作。我在等待你的回复时努力工作。

2 个答案:

答案 0 :(得分:1)

if (newtime>160000, 2, if(newtime>80000, 1, 0))

我以前误解了,如果你不打算进入8小时框架,
以上应该有帮助

答案 1 :(得分:0)

如果您仍需要新时间,则可以将查询包含在子选择中。 (只是伪代码,请使用适当的语法到您的数据库)

select *, newtime / 3 as segment
FROM "your-query"
在mysql中

考虑使用TIME

SELECT TIME(event.timestamp) / 3 as seqment