Группировать по дням из метки времени

#mysql #sql

#mysql #sql

Вопрос:

В моей posts таблице сохраняется временная метка для каждой записи post.

Какой запрос может группировать сообщения по дням, используя этот столбец метки времени?

Ответ №1:

Как насчет этого? Используя DATE функцию:

  SELECT DATE(FROM_UNIXTIME(MyTimestamp)) AS ForDate,
        COUNT(*) AS NumPosts
 FROM   MyPostsTable
 GROUP BY DATE(FROM_UNIXTIME(MyTimestamp))
 ORDER BY ForDate
  

Это покажет вам количество сообщений на каждую дату, для которых в таблице есть данные.

Комментарии:

1. Я нашел свой ответ, но ваш ответ неверен, он возвращает null, правильным является : DATE(FROM_UNIXTIME(timestamp))

2. @p.campbell : как можно ограничить количество строк для каждой даты? пример: для 2011-05-11 меня есть 10 сообщений и для 2011-05-12 20 сообщений, я хочу показать 2 post для каждой даты, вы можете мне помочь?

3. Как бы вы хотели решить, какие 2 показывать? В начале дня, или в конце дня, или большинство просмотров, или другое? Любезно предполагаю, что это совершенно новый вопрос в целом. Если вы опубликуете это, скорее всего, вы быстро получите отличный ответ!

4. @Dems: хорошо, я жду вашего ответа.

5. @p.campbell: нет, это состоит из этого вопроса, я хочу просто показать 2 последних сообщения в каждую дату

Ответ №2:

 SELECT DATE(timestamp) AS ForDate,
        COUNT(*) AS NumPosts
 FROM   user_messages
 GROUP BY DATE(timestamp)
 ORDER BY ForDate
  

Это нашлось для меня. У меня есть временная метка типа «2013-03-27 15: 46: 08».

Комментарии:

1. Это работало в MySQL 5.1.52. ДАТА (ИЗ_UNIXTIME(MyTimestamp)) в предыдущем ответе вернула значение null.

Ответ №3:

 SELECT
    *
FROM
(
    SELECT DATE(FROM_UNIXTIME(MyTimestamp)) AS ForDate,
           ROW_NUMBER() OVER (PARTITION BY DATE(FROM_UNIXTIME(MyTimestamp)) ORDER BY MyTimeStamp) AS PostRowID,
           *
    FROM   MyPostsTable
)
    AS sequenced_daily_posts
WHERE
    ForDate = <whatever date(s) you want>
    AND PostRowID <= 2
  

Комментарии:

1. Спасибо, но смотрите мой последний комментарий: i want just show 2 of last posts in each date я думаю, что этот запрос показывает только сообщения, у которых на дату этого есть 2 сообщения

2. Я протестировал Ваш запрос, и он вернул синтаксическую ошибку в (PARTITION BY DATE(FROM_UNIXTIME(MyTimestamp)))

3. Если в день есть 1 сообщение, в нем будет отображаться одно сообщение за этот день. Если в день есть 2 публикации, то будут показаны обе публикации за этот день. Если за день будет 3 или более сообщений, будут показаны только первые 2 сообщения за этот день. (Добавьте DESC к ЗАКАЗУ ПО, чтобы в нем отображались последние два сообщения каждого дня.) Это ограничение в 2 в день не имеет никакого отношения к тому, есть ли у вас сто дней, в общей сложности до 200 возвращенных записей.

4. Синтаксическая ошибка связана с дополнительным), который был удален при редактировании. Вы, должно быть, скопировали до того, как я заметил.

5. О, и, по-видимому, MySQL не поддерживает оконную функцию ROW_NUMBER (), поэтому вы можете проигнорировать этот ответ. Извините.

Ответ №4:

Я провел много исследований по поводу этой ошибки и получил решение, согласно которому, если вы выбираете метку времени в пределах ДАТЫ, тогда вы должны использовать этот символ (`) до и после имени столбца.

 select DATE(addedon) as addedon, count(*) from data where id= '$bid' GROUP BY DATE(addedon)