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

GROUPBYとORDERBYでMySQLの間違った結果

    これはあなたの質問です:

    SELECT *
    FROM (SELECT *
          FROM user_comission_configuration_history
          ORDER BY on_date DESC
         ) AS ordered_history
    WHERE user_id = 408002
    GROUP BY comission_id;
    

    クエリの大きな問題の1つは、MySQL拡張機能を使用してgroup byを実行することです。 そのMySQL明示的に 警告します。拡張機能は、selectの他の列を使用することです group byに含まれていないもの または集計関数で。警告(こちら )は:

    したがって、列に返される値は不確定です。 。

    これがあなたが望むものを手に入れるための非常に効率的な方法です(英語で「コミッション」のスペルが正しい):

    SELECT *
    FROM user_commission_configuration_history cch
    WHERE NOT EXISTS (select 1
                      from user_commission_configuration_history cch2
                      where cch2.user_id = cch.user_id and
                            cch2.commission_id = cch.commission_id and
                            cch2.on_date > cch.on_date
                     ) AND
          cch.user_id = 408002;
    


    1. SELECT ... FORUPDATEを使用する場合

    2. ディメンションのディメンション:データウェアハウスの最も一般的なディメンションテーブルタイプの概要

    3. Laraveleloquentのsql_mode=only_full_group_byとの互換性を解決するにはどうすればよいですか?

    4. 処理中のMySQL例外ハンドラアクセス例外