每年获取统计数据

时间:2014-05-05 21:00:15

标签: php mysql sql

我正在使用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的统计数据

对不起我的英文,谢谢你的回答。

1 个答案:

答案 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`;