sql >> データベース >  >> RDS >> Mysql

異なる日の個々の最大値の差をどのように取得できますか?

    更新1:これがフィドルです。 http://sqlfiddle.com/#!2/818ad / 2 、テストに使用しました。
    更新2:これがフィドルです。 http: //sqlfiddle.com/#!2/3f78d/10 サンディのコメントに基づいて、さらに改良/修正するために使用しました。
    更新3:何らかの理由で、前日がない場合は正しく処理されていませんでした。そうだと思いました。ただし、動作することを確認するために更新しました(少し面倒ですが、正しいようです。最後のフィドル: http://sqlfiddle.com/#!2/3f78d/45

    @Grijeshは、入力データの自己結合を介して、概念的に必要な主なものを取得したと思います(したがって、必ず彼の回答に投票してください!)。私は彼のクエリを構文について少しクリーンアップしました(彼のクエリから構築しました!):

    SELECT
    DATE(t1.`Production_date`) as theDate,
    MAX( t1.`bundle_count` ) AS  'max(bundle_count)',
    MAX( t1.`bundle_count` ) - 
        IF(
           EXISTS
               (
                SELECT date(t2.production_date)
                FROM input_example t2
                WHERE t2.machine_no = 1 AND 
                      date_sub(date(t1.production_date), interval 1 day) = date(t2.production_date)
            ),
            (
                SELECT MAX(t3.bundle_count)
                FROM input_example t3
                WHERE t3.machine_no = 1 AND 
                      date_sub(date(t1.production_date), interval 1 day) = date(t3.production_date)
                GROUP BY DATE(t3.production_date)
            ),          0
        )
        AS Total_Bundles_Used
    FROM  `input_example` t1
    WHERE t1.machine_no = 1
    GROUP BY DATE( t1.`production_date` )      
    

    注1:@Grijeshと私は、クエリ構文の問題を同時にクリーンアップしていたと思います。両方ともクリーンアップを行った後、非常に類似したバージョンになってしまったことは心強いことです。私のバージョンは、IFNULL()の使用が異なります 先行データがない場合。また、DATE_SUBになりました 、およびDATE()を使用して、さまざまな日付を時間コンポーネントのない単なる日付に減らすようにしました。

    注2:元々、ソーステーブルを完全に理解していなかったため、クエリに実行カウントを実装する必要があると思いました。しかし、よく調べてみると、ソースデータにすでに実行カウントがあることが明らかなので、そのデータを元に戻しました。



    1. SQLServerの日付から短い月の名前を取得する5つの方法

    2. MySQLトリガーの設定

    3. MySQL Insert Into Select

    4. Googleマップのオーバーレイシェイプをデータベースに保存するにはどうすればよいですか?