MySQL组按当月的月份和日期

时间:2013-01-29 16:27:33

标签: mysql group-by

我想知道这是否可能: 我有一些数据,我有一个日期时间字段。现在我想做一个SQL查询,我可以按月和每个月按天制作组。 像这样:

Month   day    COUNT(*)
1       1         200
1       2         300
1       3         500
2       1         600
2       2         0

为什么我需要这个?我需要进行一个SQL查询来制作图表XY并显示填充此requeriments: SELECT系列,value1,value2 FROM ... WHERE ... GROUP BY ... ORDER BY。

所以我想让每个月都成为SERIE,然后每一天都是value1,而计数值是2

希望大家都明白我的机器人问题......

最好的问候和先进的

4 个答案:

答案 0 :(得分:0)

这就是你要找的全部吗?

SELECT MONTH(m), DAY(d), COUNT(*)
FROM sparkles
WHERE YEAR(y) = 2013
GROUP BY MONTH(m), DAY(d)

如果您的日期有差距,则需要使用日期查找表。

答案 1 :(得分:0)

使用MONTH()DAYOFMONTH()功能。

以下是文档:dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html

答案 2 :(得分:0)

试试这个:

SELECT Month, Day, Count(*) FROM yout_table group by Month, Day

答案 3 :(得分:0)

首先,你需要一张今年每天都有的桌子:

CREATE TABLE DaysThisYear
(
    dt datetime not null,
    mm int, dd int,
    primary key (dt)
);
INSERT INTO DaysThisYear (dt,mm,dd)
SELECT ymd,MONTH(ymd),DAY(ymd) FROM
(SELECT IFNULL(ymd + INTERVAL 0 SECOND,'1980-01-01 00:00:00') ymd
FROM (SELECT CONCAT(yy,'-',SUBSTR(mm+100,2),'-',SUBSTR(dd+100,2)) ymd,yy
FROM (SELECT 1 dd UNION SELECT 2 UNION SELECT 3 UNION SELECT  4
UNION SELECT  5 UNION SELECT  6 UNION SELECT  7 UNION SELECT  8
UNION SELECT  9 UNION SELECT 10 UNION SELECT 11 UNION SELECT 12
UNION SELECT 13 UNION SELECT 14 UNION SELECT 15 UNION SELECT 16
UNION SELECT 17 UNION SELECT 18 UNION SELECT 19 UNION SELECT 20
UNION SELECT 21 UNION SELECT 22 UNION SELECT 23 UNION SELECT 24
UNION SELECT 25 UNION SELECT 26 UNION SELECT 27 UNION SELECT 28
UNION SELECT 29 UNION SELECT 30 UNION SELECT 31 UNION SELECT 32) AAA,
(SELECT YEAR(NOW()) yy,mm FROM
(SELECT 1 mm UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5
UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9 UNION
SELECT 10 UNION SELECT 11 UNION SELECT 12) M) BBB) AA) A
WHERE YEAR(ymd) <> 1980
ORDER BY ymd;

要查看今年的每一天都已加载,请运行:

SELECT * FROM DaysThisYear;

现在,如果您有一个包含DATETIME列的表,则可以将DaysThisYear表加入其中

例如,假设您的表格如下:

CREATE TABLE mydata
(
    id int not null auto_increment,
    dt DATETIME,
    .
    .
    .
    PRIMARY KEY (id),
    KEY dt (dt)
);

您可以执行以下操作:

SELECT A.mm,A.dd,SUM(IF(ISNULL(B.mm),0,1)) mmdd_count
FROM DaysThisYear A LEFT JOIN
(SELECT MONTH(dt) mm,DAY(dy) dd FROM mydata) B
ON A.mm=B.mm AND A.dd=B.dd;

试一试!!!