2016-04-03 2 views
1

Я хочу заказать мой SQL заявление по дате и популярности очков, как это ...Округление MySQL даты на 2 дня периодов

select * 
from results 
order by date(create_date) DESC, popularity DESC 

Функция даты выше удаляет часы/минуты - так заказов в день, и самый популярный, но я действительно хочу добиться того, чтобы заказать на основе двухдневных окон.

Есть ли способ, которым я могу заключать даты в 48-часовой период? Что-то вроде этого ...

2016-03-30 13:18:04 = 2016-03-30 
2016-03-31 13:18:04 = 2016-03-30 
2016-04-01 13:18:04 = 2016-04-01 
2016-04-02 13:18:04 = 2016-04-01 

Или, возможно, я думал об этом так, и есть более разумный способ сделать это ?! Спасибо за любые мысли.

ответ

1

Вы можете заказать по year, month, day отдельно, а просто добавить небольшой расчет для day.

Попробуйте это:

select * 
from results 
order by 
    YEAR(create_date) DESC, 
    MONTH(create_date) DESC, 
    FLOOR(DAY(create_date)/2.0) DESC, 
    popularity DESC 
+0

безупречный! Большое спасибо – d3wannabe

+0

@ d3wannabe Обратите внимание, что нечетные дни в начале и конце месяца не будут спарены здесь, 1-й будет автономным, 2-3 будет спарен, ... 28-29 будет спарен, 30 будет автономным или сопряжен с 31, если он существует и т. Д. Это может быть то, что вы хотите, однако это не совсем решение вашего исходного вопроса. –

1

Использование UNIX метки времени, это довольно легко обогнуть на произвольное число секунд (172800 здесь в течение 2 дней);

SELECT * 
FROM results 
ORDER BY UNIX_TIMESTAMP(date) DIV 172800 DESC, popularity DESC 

A quick SQLfiddle for testing.

+0

это действительно отлично работает - есть дополнительное преимущество, что вам не нужно беспокоиться о «границе» двухдневного окна. Благодаря Joachim – d3wannabe

Смежные вопросы