Результаты MySQL Query по месяцам

Я действительно нуждаюсь в помощи. Не дружественный MySQL, запутанный в течение прошлых нескольких дней, но теперь застрял …

Необходимо взять приведенный ниже запрос и изменить его, например, чтобы получать только записи, закрытые в месяце «январь». Возможно ли это снизу? Не могу понять это …

<?php
$recentlyClosedDays = 7;
?>$query1 = "SELECT HD_TICKET.ID as ID,
HD_TICKET.TITLE as Title,
HD_STATUS.NAME AS Status,
HD_PRIORITY.NAME AS Priority,
HD_TICKET.CREATED as Created,
HD_TICKET.MODIFIED as Modified,
S.FULL_NAME  as Submitter,
O.FULL_NAME  as Owner,
HD_TICKET.RESOLUTION as Resolution,
(SELECT COMMENT FROM HD_TICKET_CHANGE WHERE HD_TICKET_ID=HD_TICKET.ID ORDER BY TIMESTAMP DESC LIMIT 1) as Comment,
HD_TICKET.CUSTOM_FIELD_VALUE0 as Type
FROM HD_TICKET
JOIN HD_STATUS ON (HD_STATUS.ID = HD_TICKET.HD_STATUS_ID)
JOIN HD_PRIORITY ON (HD_PRIORITY.ID = HD_TICKET.HD_PRIORITY_ID)
LEFT JOIN USER S ON (S.ID = HD_TICKET.SUBMITTER_ID)
LEFT JOIN USER O ON (O.ID = HD_TICKET.OWNER_ID)
WHERE (HD_TICKET.HD_QUEUE_ID = $mainQueueID)
AND (HD_STATUS.STATE like '%Closed%')
AND (HD_TICKET.TIME_CLOSED >= DATE_SUB(NOW(), INTERVAL $recentlyClosedDays DAY))
ORDER BY HD_TICKET.TIME_CLOSED DESC
";

Любая помощь будет принята с благодарностью, и пиво будет в долгу 🙂

0

Решение

Выбирать DATE, DATETIME, или же TIMESTAMP значения в текущий месяц, ты делаешь это.

WHERE timestampval >= DATE(DATE_FORMAT(NOW(), '%Y-%m-01'))
AND timestampval <  DATE(DATE_FORMAT(NOW(), '%Y-%m-01')) + INTERVAL 1 MONTH

Для прошлый месяц вы можете сделать это:

WHERE timestampval >= DATE(DATE_FORMAT(NOW(), '%Y-%m-01')) - INTERVAL 1 MONTH
AND timestampval <  DATE(DATE_FORMAT(NOW(), '%Y-%m-01'))

Для предыдущий год Вы могли бы сделать это:

WHERE timestampval >= DATE(DATE_FORMAT(NOW(), '%Y-01-01')) - INTERVAL 1 YEAR
AND timestampval <  DATE(DATE_FORMAT(NOW(), '%Y-01-01'))

Вы можете суммировать (агрегировать) таблицы по месяцам следующим образом:

SELECT DATE(DATE_FORMAT(timestampval , '%Y-%m-01')) AS month_starting,
SUM(whatever) AS total,
COUNT(whatever) AS transactions
FROM table
GROUP BY DATE(DATE_FORMAT(timestampval , '%Y-%m-01'))

Это все работает, потому что это выражение:

DATE(DATE_FORMAT(sometime, '%Y-%m-01'))

принимает произвольный sometime значение и возвращает первый день месяца, в котором происходит отметка времени. Так же,

DATE(DATE_FORMAT(sometime, '%Y-01-01'))

возвращает первый день года. Затем вы можете использовать арифметику даты, как + INTERVAL 1 MONTH манипулировать этими первыми днями месяцев или лет.

Вот более полная рецензия на эту тему. http://www.plumislandmedia.net/mysql/sql-reporting-time-intervals/

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]