2013-03-26 47 views
1

我們需要在週五到週五的基礎上運行整個報表。我沒有看到week()這個功能。MYSQL星期五分組報告

假設我們有一個表Summary,有兩列 - countcreation_date。我需要根據星期五至星期五的creation_date彙總計數。這需要運行幾年。

任何建議,將不勝感激。

+0

爲什麼week()不合適? – Strawberry 2013-03-26 17:29:54

+0

周以週一,週一爲起點。 – kuriouscoder 2013-03-26 17:55:43

+0

不能用'my_date-INTERVAL 2 DAY'解決嗎? – Strawberry 2013-03-26 21:34:52

回答

1

下面是一個查詢告訴你上週五和下週四從今天

SELECT DATE(week_beg),DATE(week_end) FROM 
(SELECT daywk_beg + INTERVAL 0 second week_beg, 
daywk_beg + INTERVAL 604799 second week_end 
FROM (SELECT (DATE(NOW()) - INTERVAL daysbacktoday DAY) daywk_beg 
FROM (SELECT SUBSTR('2345601',wkndx,1) daysbacktoday 
FROM (SELECT DAYOFWEEK(dt) wkndx FROM (SELECT DATE(NOW()) dt) 
AAAAA) AAAA) AAA) AA) A; 

,這是今天的結果

mysql> SELECT DATE(week_beg),DATE(week_end) FROM 
    -> (SELECT daywk_beg + INTERVAL 0 second week_beg, 
    -> daywk_beg + INTERVAL 604799 second week_end 
    -> FROM (SELECT (DATE(NOW()) - INTERVAL daysbacktoday DAY) daywk_beg 
    -> FROM (SELECT SUBSTR('2345601',wkndx,1) daysbacktoday 
    -> FROM (SELECT DAYOFWEEK(dt) wkndx FROM (SELECT DATE(NOW()) dt) 
    -> AAAAA) AAAA) AAA) AA) A; 
+----------------+----------------+ 
| DATE(week_beg) | DATE(week_end) | 
+----------------+----------------+ 
| 2013-03-22  | 2013-03-28  | 
+----------------+----------------+ 
1 row in set (0.00 sec) 

I wrote a query like this in the DBA StackExchange

下面是一個示例表

CREATE TABLE summary 
(
    id int not null auto_increment, 
    ... 
    `count` int not null default 0, 
    creation_date date, 
    primary key (id) 
); 

爲了讓您的查詢的基礎上週五相符的結果,你需要這個

SELECT SUM(`count`) count_sum,friday FROM 
(SELECT `count`,DATE(week_beg) friday 
(SELECT daywk_beg + INTERVAL 0 second week_beg, 
daywk_beg + INTERVAL 604799 second week_end,`count` 
FROM (SELECT `count`,(DATE(NOW()) - INTERVAL daysbacktoday DAY) daywk_beg 
FROM (SELECT `count`,SUBSTR('2345601',wkndx,1) daysbacktoday 
FROM (SELECT `count`,DAYOFWEEK(dt) wkndx FROM 
(SELECT `count`,creation_date FROM dt) 
AAAAA) AAAA) AAA) AA) A) fri 
GROUP BY friday; 

試試看!

0
Select 
count, creation_date, 
from 
(
    SELECT 
    count, creation_date 
    DATEDIFF(week, '2013-03-30', date) AS WeekNumber 
    FROM Summary 
) 
GROUP BY 
count, 
creation_date, 
WeekNumber 

你會,你可以按

YEARWEEK(`date` - INTERVAL 5 DAY) 

代替2013-03-30

+0

我確實希望一次性生成報告。我不想有相同的工作。 – kuriouscoder 2013-03-26 17:55:23

+0

@ kuriouscoder更新了我的答案 – 2013-03-26 18:26:28

0

輸入開始日期,或者你可以用這個計算您start_week_dateend_week_date

SELECT 
    `date`, 
    `date` - INTERVAL (DAYOFWEEK(`date`) + 1) % 7 DAY start_week_date, 
    `date` + INTERVAL 6 - (DAYOFWEEK(`date`) + 1) % 7 DAY end_week_date 
FROM 
    dates 

請參閱此fiddle

所以您的查詢可能是這樣的:

SELECT 
    creation_date - INTERVAL (DAYOFWEEK(creation_date) + 1) % 7 DAY start_week_date, 
    SUM(count) --- or your aggregate function 
FROM 
    Summary 
GROUP BY 
    creation_date - INTERVAL (DAYOFWEEK(creation_date) + 1) % 7 DAY start_week_date