可以为此优化查询的内容是什么?

时间:2012-08-13 06:27:38

标签: mysql

我陷入了小问题。有一个名为Table_Activities的表。

Table_Activities Act_idDat e,Activity_namedescription)。

我们需要生成一份报告。用户将从下拉列表中选择要为其生成报告的

我们需要按活动名称显示该月份和年份组的所有活动。

示例 - 用户选择六月 2012

报告将是 -

园艺

01/06/2012 - They have planted 100 trees.
14/06/2012 - something
27/06/2012 - something

培训

02/06/2012 - Detail description
15/06/2012 - something
28/06/2012 - something

我的问题是以这种格式获取数据的mysql查询是什么?

3 个答案:

答案 0 :(得分:1)

要按Activity_name获取特定月份和年份组的数据,请尝试以下操作:

SELECT Activity_name
,GROUP_CONCAT(DATE_FORMAT(Date,"%d/%m/%Y")) as `Date`
,GROUP_CONCAT(Description) as `Description`
FROM Table_Activities 
WHERE MONTH(Date) = MONTH('2012-06-01')
AND YEAR(Date) = YEAR('2012-06-01')
GROUP BY Activity_name 

<强>输出

ACTIVITY_NAME    DATE                    DESCRIPTION
-----------------------------------------------------------------------------------
Gardening        01/06/2012,27/06/2012   They have planted 100 trees.,Description3
Training         12/06/2012,28/06/2012   Description2,Description4

See this SQLFiddle

答案 1 :(得分:1)

select `Date`,description from tm_activities 
where month(`Date`)='6' and year(`Date`)='2012' 
order by Activity_name,`date` 

要返回问题中指明的确切格式,请尝试以下操作:

select concat(if(actdate='',activity_name,date_format(actdate,'%d/%m/%y')),if(description<>'',concat(' - ',description),'')) as labelm from
(
(select ActDate,description,activity_name from tm_activities where month(ActDate)='6' and year(ActDate)='2012' 
) 
union all
(Select distinct '','',activity_name from tm_activities where month(ActDate)='6' and year(ActDate)='2012')
)m order by activity_name,actdate
;

SQL FIDDLE HERE.

输出如下:

Gardening
01/06/12 - They have planted 100 trees.
27/06/12 - Gar 2
Training
12/06/12 - Training 1
28/06/12 - Traning 2
30/06/12 - Traning 3

答案 2 :(得分:0)

Select 
    DATE_FORMAT('date_column',"%D/%M/%Y") as `Date`,
    other_column  
from Table_Activities 
where Month(Date) = Month('2012-06-01')
AND Year(Date) = Year('2012-06-01')