1

年間を通して金曜日から金曜日までのレポートを実行する必要があります。week()これには便利な機能がありません。

2つの列を持つテーブルがあるとしSummaryます-countcreation_datecreation_date金曜日から金曜日までのスパンに基づいてカウントを集計する必要があります。これは数年間実行する必要があります。

任意の提案をいただければ幸いです。

4

3 に答える 3

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)

私はDBAStackExchangeでこのようなクエリを書きました

これがサンプルテーブルです

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;

試してみる !!!

于 2013-03-26T19:14:04.487 に答える
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

代わりに開始日を入力します2013-03-30

于 2013-03-26T17:24:31.667 に答える
0

グループ化できます

YEARWEEK(`date` - INTERVAL 5 DAY)

または、これを使用して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

このフィドルをご覧ください。

したがって、クエリは次のようになります。

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
于 2013-03-26T18:34:01.493 に答える