我們需要在週五到週五的基礎上運行整個報表。我沒有看到week()
這個功能。MYSQL星期五分組報告
假設我們有一個表Summary
,有兩列 - count
和creation_date
。我需要根據星期五至星期五的creation_date
彙總計數。這需要運行幾年。
任何建議,將不勝感激。
我們需要在週五到週五的基礎上運行整個報表。我沒有看到week()
這個功能。MYSQL星期五分組報告
假設我們有一個表Summary
,有兩列 - count
和creation_date
。我需要根據星期五至星期五的creation_date
彙總計數。這需要運行幾年。
任何建議,將不勝感激。
下面是一個查詢告訴你上週五和下週四從今天
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;
試試看!
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
我確實希望一次性生成報告。我不想有相同的工作。 – kuriouscoder 2013-03-26 17:55:23
@ kuriouscoder更新了我的答案 – 2013-03-26 18:26:28
輸入開始日期,或者你可以用這個計算您start_week_date
和end_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
爲什麼week()不合適? – Strawberry 2013-03-26 17:29:54
周以週一,週一爲起點。 – kuriouscoder 2013-03-26 17:55:43
不能用'my_date-INTERVAL 2 DAY'解決嗎? – Strawberry 2013-03-26 21:34:52