0

私の現在のクエリ:

    Select `userSubUnitsID`, `userSubUnits`.`userID`, CONCAT(`u`.`fname`,' ',`u`.`lname`) AS `full`, `pID`, SUM(`quantComp`) AS `total`
    From `userSubUnits`
    JOIN `u` ON `u`.`userID` = `userSubUnits`.`userID`
    GROUP BY `userID`

私が必要としているのは、日付までにこれを取得することです。したがって、このように見えます。

    +-----+------------+----------+-------------+
    |user |current week|prev week |two weeks ago|
    +-----+------------+----------+-------------+
    |John |         564|       354|          687|
    +-----+------------+----------+-------------+
    |Paul |         451|       328|          845|
    +-----+------------+----------+-------------+
    etc

これは単一のクエリで可能ですか? 現在の週に制限する方法は知っていますが、前の週に追加する方法はわかりません。

参考までに、週は日曜日の深夜に終了します。前もって感謝します

4

1 に答える 1

2
SELECT user, SUM(WEEKOFYEAR(datefield) = WEEKOFYEAR(now()) AS current_week,
    SUM(WEEKOFYEAR(datefield) = WEEKOFYEAR(now() - INTERVAL 1 WEEK)) AS last_week,
    SUM(WEEKOFYEAR(datefield) = WEEKOFYEAR(now() - INTERVAL 2 WEEK)) AS two_weeks_ago
FROM ...
GROUP BY WEEKOFYEAR(now())

醜いですが、トリックを行う必要があります。日付が年の境界にまたがる場合、これは失敗することに注意してください。これを回避するには、年ベースのロジックを追加する必要があります。

同様に、この種の変換をクライアント側で行う方がよいでしょう。拡張するのは醜く、ほんの数週間以上の作業を開始する必要がある場合は、すぐに恐ろしく非効率になります。次に例を示します。

SELECT user, YEAR(datefield), WEEKOFYEAR(datefield), COUNT(*)
FROM ...
GROUP BY YEAR(datefield), WEEKOFYEAR(datefield)
于 2012-11-14T16:55:36.320 に答える