2017-05-27 4 views
1

私のデータベースでは、週の開始日と週の終了日のようなデータを毎週の形式で保存しました。その週刊データから毎月のデータを表示したいのですが、任意の週は(26-4-2013,2-5-2013)のように両方の月にあるので、週の最大数を持つ月の今週のデータを計算します。mysqlの週単位の情報から毎月のデータを計算するには

+0

私はあなたが週ではなく日付で行くことを検討すべきだと思います。週がどこで終了したかにかかわらず、30日または31日まで1月30日または31日の月次レポートを取得できます。あなたは何を達成しようとしていますか? – Richie

+0

私は毎週の形式でデータを保存していました。これは週の開始日と週の終了日を意味しますが、今月はこのデータがほしいと思っています。これは関連する月のデータを合計したものです。関連する週の日数が4か4以上であれば、今週のデータを追加します。そうでなければ、次の月に追加します。このシナリオでは、mysqlクエリーが必要です。 –

答えて

1

終了日が<されている場合は、「開始日は> =である場合

  • 「前月の最終日の4日間マイナス」クエリ内の2つの条件

    1. をチェックする必要があります次の月の第4日 "

    これは関連するデータを与えるはずです。

  • 0
    DROP TABLE IF EXISTS `data`; 
    
    CREATE TABLE `data` (
        `id` int(11) NOT NULL, 
        `start_date` date DEFAULT NULL, 
        `end_date` date DEFAULT NULL, 
        `value` int(11) DEFAULT NULL, 
        PRIMARY KEY (`id`) 
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1; 
    

    上記のサンプルに基づいてデータを挿入しました。サンプルデータが正しくないかどうか教えてください。それが3より大きい場合END_DATE列のチェック日が続いSTART_DATE列から月 を選択し、他のEND_DATE列から月を選択し

    INSERT INTO `data` VALUES (1,'2013-03-01','2013-03-07',10),(2,'2013-03-08','2013-03-14',50),(3,'2013-03-15','2013-03-21',60),(4,'2013-03-22','2013-03-28',30),(5,'2013-03-29','2013-04-04',80),(6,'2013-04-05','2013-04-11',90),(7,'2013-04-12','2013-04-18',70),(8,'2013-04-19','2013-04-25',20),(9,'2013-04-26','2013-05-02',40); 
    

    select if(day(end_date) > 3, month(end_date), month(start_date)) as monthname,sum(value) 
    from data 
    group by monthname 
    

    次の月にid = 5が考えられます。

    関連する問題