-1

我想知道这是否可能:我有一些数据,其中有一个日期时间字段。现在我想做一个 sql 查询,我可以按月和每个月按天进行分组。像这样的东西:

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

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

所以我想让每个月都成为一个SERIE,然后每天都是value1,count value 2

希望每个人都能理解我的机器人问题...

最好的问候和 tks 在先进

4

4 回答 4

0

这就是你要找的全部吗?

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

如果您的日期有间隔,您将需要使用日期查找表。

于 2013-01-29T16:30:11.350 回答
0

使用MONTH()DAYOFMONTH()函数。

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

于 2013-01-29T16:30:56.980 回答
0

尝试这个:

SELECT Month, Day, Count(*) FROM yout_table group by Month, Day
于 2013-01-29T16:32:05.703 回答
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;

试试看 !!!

于 2013-01-29T20:50:24.933 回答