2013-05-23 2 views
0

Мой стол:Как я могу группировать строки sql по часам?

tbl_questions => 
qid 
question 
detail 
mcid 
cid 
uid 
answercount 
dateposted 
status 
showname 
emailnotify 
question_type_id 

Я хотел бы получить все строки группы по часам. {dateposted = Y-m-d H: i: s} Я хотел бы обновить {question_type_id до 2}, где у меня больше строк за этот час.

Ну, если кто-то hase получил 15 вопросов в час, я хотел бы дать им тип 2, но только те сообщения (строки), которые в тот час. Извините, трудно сказать, чего я точно хочу, мой английский беден.

sample data tbl_questions =>

qid = 1, uid = 1, dateposted = 2013-01-01 10:11:10, question_type_id = 1 
qid = 2, uid = 1, dateposted = 2013-01-01 10:16:10, question_type_id = 1 
qid = 3, uid = 1, dateposted = 2013-01-01 10:18:10, question_type_id = 1 
qid = 4, uid = 1, dateposted = 2013-01-01 10:19:10, question_type_id = 1 
qid = 5, uid = 1, dateposted = 2013-01-01 10:20:10, question_type_id = 1 
qid = 6, uid = 1, dateposted = 2013-01-01 10:22:10, question_type_id = 1 
qid = 7, uid = 1, dateposted = 2013-01-01 10:23:10, question_type_id = 1 
qid = 8, uid = 1, dateposted = 2013-01-01 10:24:10, question_type_id = 1 
qid = 9, uid = 1, dateposted = 2013-01-01 10:25:10, question_type_id = 1 
qid = 10, uid = 1, dateposted = 2013-01-01 10:26:10, question_type_id = 1 
qid = 11, uid = 1, dateposted = 2013-01-01 10:27:10, question_type_id = 1 
qid = 12, uid = 2, dateposted = 2013-01-01 10:17:10, question_type_id = 1 
qid = 13, uid = 2, dateposted = 2013-01-01 10:27:10, question_type_id = 1 
qid = 14, uid = 1, dateposted = 2013-01-01 12:27:10, question_type_id = 1 

Я хотел бы update те rows они posted by uid = 1, Cos, что больше, чем предел в час. Мне нужно set question_type_id = 2 в этих рядах.

Таким образом, ожидаемый результат: tbl_questions =>

qid = 1, uid = 1, dateposted = 2013-01-01 10:11:10, question_type_id = 2 
qid = 2, uid = 1, dateposted = 2013-01-01 10:16:10, question_type_id = 2 
qid = 3, uid = 1, dateposted = 2013-01-01 10:18:10, question_type_id = 2 
qid = 4, uid = 1, dateposted = 2013-01-01 10:19:10, question_type_id = 2 
qid = 5, uid = 1, dateposted = 2013-01-01 10:20:10, question_type_id = 2 
qid = 6, uid = 1, dateposted = 2013-01-01 10:22:10, question_type_id = 2 
qid = 7, uid = 1, dateposted = 2013-01-01 10:23:10, question_type_id = 2 
qid = 8, uid = 1, dateposted = 2013-01-01 10:24:10, question_type_id = 2 
qid = 9, uid = 1, dateposted = 2013-01-01 10:25:10, question_type_id = 2 
qid = 10, uid = 1, dateposted = 2013-01-01 10:26:10, question_type_id = 2 
qid = 11, uid = 1, dateposted = 2013-01-01 10:27:10, question_type_id = 2 
qid = 12, uid = 2, dateposted = 2013-01-01 10:17:10, question_type_id = 1 
qid = 13, uid = 2, dateposted = 2013-01-01 10:27:10, question_type_id = 1 
qid = 14, uid = 1, dateposted = 2013-01-01 12:27:10, question_type_id = 1 
+0

что ваша РСУБД? – Marc

+1

Покажите нам, что вы пробовали до сих пор ... – Jose

+2

http://stackoverflow.com/q/14085923/901048 и http://stackoverflow.com/q/1080207/901048 – Blazemonger

ответ

1

Вы должны действовать в несколько этапов.

Предполагая, что вы используете MySQL, проверьте date & time functions. Функция HOUR() может быть то, что вы хотите:.

SELECT count(id) AS cpt, HOUR(dateposted) AS hour FROM tbl_questions GROUP BY hour ORDER BY cpt DESC; 

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

UPDATE tbl_questions SET question_type_id = 2 WHERE HOUR(dateposted) IN (...your list of hours) 
Смежные вопросы