MYSQL星期五分组报告

MYSQL星期五分组报告,mysql,Mysql,我们需要在整个一年的星期五到星期五的基础上运行报告。我看不到week()函数对此很方便 假设我们有一个表Summary,有两列-count和creation\u date。我需要根据从星期五到星期五的creation\u date汇总计数。这需要运行几年 如有任何建议,将不胜感激 Select count, creation_date, from ( SELECT count, creation_date DATEDIFF(week, '2013-03-30', da

我们需要在整个一年的星期五到星期五的基础上运行报告。我看不到
week()
函数对此很方便

假设我们有一个表
Summary
,有两列-
count
creation\u date
。我需要根据从星期五到星期五的
creation\u date
汇总计数。这需要运行几年

如有任何建议,将不胜感激

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
您将输入您的开始日期以代替
2013-03-30

您将输入您的开始日期,以代替您可以分组的
2013-03-30

YEARWEEK(`date` - INTERVAL 5 DAY)
或者,您可以使用以下公式计算您的
开始\u周\u日期
结束\u周\u日期

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
请看这个

因此,您的查询可以如下所示:

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
你可以分组

YEARWEEK(`date` - INTERVAL 5 DAY)
或者,您可以使用以下公式计算您的
开始\u周\u日期
结束\u周\u日期

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
请看这个

因此,您的查询可以如下所示:

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

这里有一个查询,告诉您从今天开始的前一个星期五和下一个星期四

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)

这是一张样品表

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 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)

这是一张样品表

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;

试试看

为什么周()不合适?周的开始边界是星期日、星期一。这不能用“我的日期间隔2天”来解决吗?为什么周()不合适?周的开始边界是星期日、星期一。这不能用“我的日期间隔2天”来解决吗?我确实想一次性生成报告。我不想为同一个任务使用cron作业。我只想一次性生成报告。我不想有相同的cron工作。