简体   繁体   English

基于月份的MySQL查询结果

[英]MySQL Query results based on month

I really need some help. 我真的需要一些帮助。 Not MySQL friendly, muddled through this last few days but now stuck... 这不是MySQL友好的,过去几天一直很混乱,但是现在停滞了...

Need to take the below query and modify it to pull out only records closed in month of "January" for instance. 例如,需要采取以下查询并将其修改为仅提取“一月”月份关闭的记录。 Is this possible from the below? 从下面可以做到吗? Cant figure it... 不能计算...

<?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
";

Any help would be greatly apprecaited and beer will be owed :) 任何帮助将不胜感激,将欠啤酒:)

To select DATE , DATETIME , or TIMESTAMP values in the current month , you do this. 要选择当月的 DATEDATETIMETIMESTAMP值,请执行此操作。

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

For the previous month you can do this: 上个月,您可以执行以下操作:

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

For the previous year you could do this: 对于上一年,您可以执行以下操作:

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

You can summarize (aggregate) tables by month like this: 您可以按月汇总(汇总)表,如下所示:

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'))

This all works because this expression: 这全部有效,因为此表达式:

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

takes an arbitrary sometime value and returns the first day of the month in which the timestamp occurs. 接受任意sometime值,并返回发生时间戳的月份的第一天。 Similarly, 同样的,

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

returns the first day of the year. 返回一年的第一天。 You can then use date arithmetic like + INTERVAL 1 MONTH to manipulate those first days of months or years. 然后,您可以使用日期算术(例如+ INTERVAL 1 MONTH来操纵月份或年份的前几天。

Here's a more complete writeup on this topic. 这是有关此主题的更完整的文章。 http://www.plumislandmedia.net/mysql/sql-reporting-time-intervals/ http://www.plumislandmedia.net/mysql/sql-reporting-time-intervals/

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM