Как разделить данные на 3 разных временных (24 часа) фрейма с помощью MYSQL - PullRequest
0 голосов
/ 11 декабря 2011

в первую очередь, я использую 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 

Я надеюсь, что я делаю большесмысл.Я полный ключ, когда дело доходит до программирования.Мне жаль .Я также пытаюсь заставить это работать, просматривая сеть.Я буду усердно работать в ожидании вашего ответа.

Ответы [ 2 ]

1 голос
/ 11 декабря 2011
if (newtime>160000, 2, if(newtime>80000, 1, 0))

Я неправильно понял ранее, если вы не хотите разбивать на 8 часов,
вышесказанное должно помочь

0 голосов
/ 11 декабря 2011

вы можете заключить свой запрос в подвыбор, если вам все еще нужно новое время.(Просто псевдокод, пожалуйста, используйте соответствующий синтаксис для вашей базы данных)

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

в MySQL подумайте об использовании TIME

SELECT TIME(event.timestamp) / 3 as seqment
...