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

mySQLストアドプロシージャを取得すると、別のストアドプロシージャが生成されます

    (このコミュニティによると、他のストアドプロシージャの結果セットを新しいselectテーブルのテーブルとして使用するストアドプロシージャの例が見つからなかったため)mysqlはこれをサポートしていないか、私が行うことを行うのが途方もなく難しいようです。やりたかった。

    したがって、ストアドプロシージャを呼び出すのではなく、クエリをこの最終プロシージャにコピーしました。

        DELIMITER $$
    
        CREATE DEFINER=`root`@`localhost` PROCEDURE `get_team_stats_change`(
            IN team_id INT
        )
        BEGIN
        SELECT SUM(start_weight) AS start_weight, 
            SUM(start_body_fat) AS start_body_fat, 
            SUM(current_weight) AS current_weight,
            SUM(current_body_fat) AS current_body_fat,
            SUM(weight_change) AS weight_change, 
            SUM(body_fat_change) AS body_fat_change FROM (
        SELECT ls.person_id, 
            fs.weight AS start_weight, fs.body_fat AS start_body_fat, 
            ls.weight AS current_weight, ls.body_fat AS current_body_fat,
            fs.weight - ls.weight AS weight_change, fs.body_fat - ls.body_fat AS body_fat_change
        FROM
        (SELECT ttd.person_id, bs.weight, bs.body_fat, bs.test_date
        FROM body_stats AS bs
        JOIN
            ((SELECT pbs.person_id,  min(bs.test_date)  AS first_test, max(bs.test_date) AS last_test   
            FROM body_stats AS bs,
                person_body_stats AS pbs,
                team_member AS tm,
                team AS t
            WHERE t.team_id = team_id
            AND tm.team_id = t.team_id
            AND tm.person_id = pbs.person_id
            AND pbs.body_stats_id = bs.body_stats_id
            AND tm.start_date  bs.test_date
            AND bs.test_date >= t.starting_date
            GROUP BY person_id) AS ttd,
            person_body_stats AS pbs)
        ON bs.test_date = ttd.first_test 
            AND pbs.person_id = ttd.person_id 
            AND pbs.body_stats_id = bs.body_stats_id) AS fs,
    
        (SELECT ttd.person_id, bs.weight, bs.body_fat, bs.test_date
        FROM body_stats AS bs
        JOIN
            ((SELECT pbs.person_id,  min(bs.test_date)  AS first_test, max(bs.test_date) AS last_test   
            FROM body_stats AS bs,
                person_body_stats AS pbs,
                team_member AS tm,
                team AS t
            WHERE t.team_id = team_id
            AND tm.team_id = t.team_id
            AND tm.person_id = pbs.person_id
            AND pbs.body_stats_id = bs.body_stats_id
            AND tm.start_date  bs.test_date
            AND bs.test_date >= t.starting_date
            GROUP BY person_id) AS ttd,
            person_body_stats AS pbs)
        ON bs.test_date = ttd.last_test 
            AND pbs.person_id = ttd.person_id 
            AND pbs.body_stats_id = bs.body_stats_id) AS ls
            WHERE ls.person_id = fs.person_id
           ) AS delta;
        END
    
    


    1. gemruby-oci8を使用するOracleインスタントクライアントがRailsのDBに接続できないc

    2. MySQLはクエリの理解を説明します

    3. 間違ったデータベースユーザーを使用しようとしているDjango

    4. Django:バッファリングされていないmysqlクエリ