MySQL: диапазон дат недели с номером недели в запросе - PullRequest
6 голосов
/ 14 сентября 2010

Я получил таблицу базы данных, которая выглядит примерно так:

| id         | clock         | info
----------------------------------------------
| 1          | 1262556754    | some info
| 2          | 1262556230    | some other info
| 3          | 1262556988    | and another
| 4          | 1262555678    | and some more

Содержит записи журнала и метку времени Unix, когда этот журнал был записан. Что мне нужно, так это получать еженедельный отчет о том, сколько записей журнала было за каждую неделю. Вот запрос, который я написал:

SELECT
    DATE_FORMAT(FROM_UNIXTIME(clock), "%U") AS week
count(*) as cnt
FROM logs
WHERE DATE_FORMAT(FROM_UNIXTIME(clock), "%Y") = '2010'
GROUP BY week

Это дает такой результат:

| week       | cnt
-------------------------------
| 1           | 55 
| 2           | 134   
| 4           | 765
| 20          | 65

Отлично! Но то, что я хотел бы видеть, это диапазоны дат, такие как 08 Feb 2010 00:00 - 15 Feb 2010 00:00, поэтому мой набор результатов будет выглядеть так:

| day_start           | day_end           | cnt
---------------------------------------------------------
| 08 Feb 2010 00:00   | 15 Feb 2010 00:00 | 55 
| 15 Feb 2010 00:00   | 22 Feb 2010 00:00 | 76
| 22 Feb 2010 00:00   | 01 Mar 2010 00:00 | 756

Есть ли способ сделать это?

Ответы [ 2 ]

6 голосов
/ 09 октября 2010

Используйте STR_TO_DATE('201008 Monday', '%X%V %W');, чтобы получить правильную дату, такую ​​как 2010-02-22, затем используйте DATE_FORMAT, чтобы получить нужный формат.

3 голосов
/ 14 сентября 2010

Если в этом столбце «недели» хранится номер данной недели в течение года, вы можете просто преобразовать его в строку даты с помощью функции makedate.

Например:

select makedate(2010, week * 7);

Это должно работать, учитывая, что ваши отчеты относятся к конкретному году.Приветствия

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...