2012-03-23 57 views
0

喜欢的东西:如何获得的最近6个月的数字只用mysql(无PHP)

SELECT MONTH(*date?*) 
    FROM 
    //Not sure what goes here 
LIMIT 0,6 

我知道它的简单,但我想知道如何获得的最后六个月列表万一我需要加入它。有用的,如果让过去的数据,并使用:

IFNULL(数据,0)

+0

你有你的表_DATE_或_timestamp_列?如果是的话,使用WHERE子句来获得你想要的行,如果没有,我不认为mysql会将日期/时间数据保存到元数据中的记录中。 – luukes 2012-03-23 20:50:25

回答

2
select month(DATE_SUB(now(), INTERVAL 6 MONTH)) month_6, 
     month(DATE_SUB(now(), INTERVAL 5 MONTH)) month_5, 
     month(DATE_SUB(now(), INTERVAL 4 MONTH)) month_4, 
     month(DATE_SUB(now(), INTERVAL 3 MONTH)) month_3, 
     month(DATE_SUB(now(), INTERVAL 2 MONTH)) month_2, 
     month(DATE_SUB(now(), INTERVAL 1 MONTH)) month_1 

输出

month_6 month_5 month_4 month_3 month_2 month_1 
     9  10  11  12  1  2 

如果你想让它同时包括当月,然后才开始与5并且去0而不是6到1.

如果您想要行,请执行此操作:

select  month(DATE_SUB(now(), INTERVAL 6 MONTH)) 
union select month(DATE_SUB(now(), INTERVAL 5 MONTH)) 
union select month(DATE_SUB(now(), INTERVAL 4 MONTH)) 
union select month(DATE_SUB(now(), INTERVAL 3 MONTH)) 
union select month(DATE_SUB(now(), INTERVAL 2 MONTH)) 
union select month(DATE_SUB(now(), INTERVAL 1 MONTH)) 

输出

9 
10 
11 
12 
1 
2 
+0

这将把它放在列中而不是行中。它的工作原理,但他可能需要行 – Seaux 2012-03-23 20:51:27

+0

@ocdcoder:是的。此外,这是一个硬编码的解决方案,它应该包含一些编程语言来生成查询,以防每次操作需要的月数不是恒定的时间。 – zerkms 2012-03-23 20:52:26

+0

是的,我想加入到它们中,所以我需要它们在行中。 – ALF 2012-03-23 20:53:25

1

不,这是真的比任何类似DCP的一个更好的解决方案,但它可以让你在过去几个月更多的控制。您可以创建1-6表:

create table intervals (i int); 
    insert into intervals values (1), (2), (3), (4), (5), (6); 

然后执行:

select month(date_sub(now(), interval intervals.i month)) month from intervals; 
+0

我删除了完全相同的答案:-)然后将删除它一会儿。让我的+1做*右* ;-) – zerkms 2012-03-23 21:13:30

相关问题