0

時間エントリのデータベースにクエリを実行し、会社ごとおよび週ごとに合計しています。MySQLの週関数は暦週に基づいていることを理解しています。そうは言っても、予期しないグループ化の結果が得られています。おそらくあなたは鋭い目の人々が手を貸すことができます:

SELECT * FROM (
    SELECT
        tms.date,
        SUM( IF( tms.skf_group = "HP Group", tms.hours, 0000.00 )) as HPHours,
        SUM( IF( tms.skf_group = "SKF Canada", tms.hours, 000.00 )) as SKFHours
    FROM time_management_system tms
    WHERE date >= "2012-01-01"
    AND date <= "2012-05-11" 
    AND tms.skf_group IN ( "HP Group", "SKF Canada" )
    GROUP BY WEEK( tms.date, 7 )
    # ORDER BY tms.date DESC
    # LIMIT 7
) AS T1
ORDER BY date ASC   

私の結果は次のとおりです:(たとえば、日曜日にエントリがない場合があります。null値は重要ですか?)

('date'=>'2012-01-01','HPHours'=>'0.00','SKFHours'=>'2.50'),
('date'=>'2012-01-02','HPHours'=>'97.00','SKFHours'=>'78.75'),
('date'=>'2012-01-09','HPHours'=>'86.50','SKFHours'=>'100.00'),
('date'=>'2012-01-16','HPHours'=>'68.00','SKFHours'=>'96.25'),
('date'=>'2012-01-24','HPHours'=>'39.00','SKFHours'=>'99.50'),
('date'=>'2012-02-05','HPHours'=>'3.00','SKFHours'=>'93.00'),
('date'=>'2012-02-06','HPHours'=>'12.00','SKFHours'=>'122.50'),
('date'=>'2012-02-13','HPHours'=>'64.75','SKFHours'=>'117.50'),
('date'=>'2012-02-21','HPHours'=>'64.50','SKFHours'=>'93.00'),
('date'=>'2012-03-02','HPHours'=>'45.50','SKFHours'=>'143.25'),
('date'=>'2012-03-05','HPHours'=>'62.00','SKFHours'=>'136.75'),
('date'=>'2012-03-12','HPHours'=>'54.25','SKFHours'=>'133.00'),
('date'=>'2012-03-19','HPHours'=>'77.75','SKFHours'=>'130.75'),
('date'=>'2012-03-26','HPHours'=>'61.00','SKFHours'=>'147.00'),
('date'=>'2012-04-02','HPHours'=>'86.75','SKFHours'=>'96.75'),
('date'=>'2012-04-09','HPHours'=>'84.25','SKFHours'=>'120.50'),
('date'=>'2012-04-16','HPHours'=>'90.00','SKFHours'=>'127.25'),
('date'=>'2012-04-23','HPHours'=>'103.25','SKFHours'=>'89.50'),
('date'=>'2012-05-02','HPHours'=>'72.50','SKFHours'=>'143.75'),
('date'=>'2012-05-07','HPHours'=>'68.25','SKFHours'=>'119.00')

1月2日は最初の月曜日であるため、1月1日は1日だけです。出力は連続した月曜日(1月2日、9日、16日、23日、30日など)になると思いますか?以下の予期しない週のグループ化は、結果全体を通して継続します。何か案は?

どうもありがとう!

4

2 に答える 2

3

の関数tms.dateグループ化する場合でも、選択が何を意味するのかは明確ではありません。私の推測では、「このグループに対応する任意のソース行からの値」を意味します。その時点で、出力は完全に合理的です。 tms.datedate

特定のグループに7つの日付を含めることができるとすると、結果にどの日付を取得しますか

編集:この動作は、実際には「GROUP BY and HAVING with HiddenColumns」に文書化されています:

MySQLはGROUPBYの使用を拡張して、選択リストがGROUPBY句で指定されていない非集計列を参照できるようにします。
...
サーバーは各グループから任意の値を自由に選択できるため、同じでない限り、選択される値は不確定です。さらに、各グループからの値の選択は、ORDERBY句を追加しても影響を受けません。結果セットのソートは値が選択された後に行われ、ORDERBYはサーバーが選択する値に影響を与えません。

tms.date列はGROUPBY句の一部ではありません-動作する関数のみがGROUPBY句の一部ある tms.dateため、上記のテキストは選択する方法に適用されると思います:その週内の任意の日付をtms.date取得します。

最も早い日付が必要な場合は、

SELECT MIN(tms.date), ...

MINもちろん、それは日付/時刻フィールドで機能すると仮定しています。ドキュメントからは簡単にはわかりません。

于 2012-05-11T20:46:07.647 に答える
0

質問は私には明確ではありませんが、週ごとにグループ化したくないと思います。週は年の週を与えるからです。今日は19週目です。

GROUP BY WEEKday(tms.date)のように平日でグループ化したいと思います

于 2012-05-11T20:49:57.350 に答える