我正在使用php / MySQL进行应用程序,我需要每年获取统计数据,按法定分组。
但是,这一年并不是从01-01到31-12,而是从01-08到31-07。
我获取数据的表格如下:
create table Archive (
id
dates (xx-xx-xxxx)
statut text
)
并且表统计信息如下:
create table stats (
id int,
dates text something like (2013-2014)
statut,
)
I found this query :
我这样做:
SELECT *, date_format(dates,'%Y') as date, count(id) as nbId from archive group by statut, date
但我不知道如何获得01-08到31-07的统计数据
对不起我的英文,谢谢你的回答。
答案 0 :(得分:0)
第一步是在数据库中创建一个Calendar表,并在查询中使用它。
第1步:
使用日期限制执行MySQL查询,例如将来(2040年12月31日)以及今年年初或2013年(2014年1月1日)的任意日期
SELECT datediff('2040-12-31','2014-01-01');
您将需要该查询为您提供的值。以上查询返回9861。
第2步:
现在创建实际的日历表。您不仅需要日期,还需要可用于设置与每个日期相关的其他数据的各种字段,例如假期,周末,发薪日等。
CREATE TABLE calendar (
dt DATE NOT NULL PRIMARY KEY,
y SMALLINT NULL,
q tinyint NULL,
m tinyint NULL,
d tinyint NULL,
dw tinyint NULL,
monthName VARCHAR(9) NULL,
dayName VARCHAR(9) NULL,
w tinyint NULL,
isWeekday BINARY(1) NULL,
isHoliday BINARY(1) NULL,
holidayDescr VARCHAR(32) NULL,
isPayday BINARY(1) NULL
);
第3步:
填充表格
CREATE TABLE ints ( i tinyint );
INSERT INTO ints VALUES (0),(1),(2),(3),(4),(5),(6),(7),(8),(9);
INSERT INTO calendar (dt)
SELECT DATE('2010-01-01') + INTERVAL a.i*10000 + b.i*1000 + c.i*100 + d.i*10 + e.i DAY
FROM ints a JOIN ints b JOIN ints c JOIN ints d JOIN ints e
WHERE (a.i*10000 + b.i*1000 + c.i*100 + d.i*10 + e.i) <= 9861 #VALUE GOTTEN EARLIER
ORDER BY 1;
基本上,这会使用您需要的值填充表格。使用发薪日,假期等值填充表格还有其他事项可做。
然后您可以运行如下查询:
SELECT `count(id)` as `nbid`, `date`,
(SELECT COUNT(*)
FROM `calendar`
WHERE `dt` > `date`
) AS `somethingdate`
FROM `archives`;