2017-01-23 4 views
0

私はsql_modeの

クエリを次のようにあるテスト環境でクエリをテストしようとしていますを変更することなく、このクエリを実行しますエラー: -

SQL Error (1055): 'digitalpurse.b.txnDate' isn't in GROUP BY 
検索の多くは、私がテスト環境は

SQLモードアプリケーションフローとセキュリティの目的のために変更することはできませんsql_modes持っていることが判明した後、

問合せは、私のローカル環境ではなく、テスト環境で動作します: -

@@sql_mode                                | 
+------------------------------------------------------------+ 
| ONLY_FULL_GROUP_BY, 
STRICT_TRANS_TABLES, 
NO_ZERO_IN_DATE, 
NO_ZERO_DATE, 
ERROR_FOR_DIVISION_BY_ZERO, 
NO_AUTO_CREATE_USER, 
NO_ENGINE_SUBSTITUTION | 

のsql_modeを変更せずに、このクエリを実行する方法はありますか? その他の情報が必要な場合は教えてください。 D

+0

[の可能性の重複は、MySQL用ANY \ _VALUE機能があり、日付がエンドユーザーに表示されていることを最高のそれをロケールだと思います5.6?](http://stackoverflow.com/questions/37089347/is-there-any-value-capability-for-mysql-5-6) – e4c5

+0

@Strawberryはそうしましたが、クエリで返されたデータは正しくありませんこの質問を投稿する必要があります – abhi314

+0

どのMySQLのバージョンを使用していますか?それが5.7ならば、あなたは 'ANY_VALUE()'を使うことができます。 – Barmar

答えて

1

DATE(b.txndate)を選択してGROUP BY句に一致するようにクエリをサブクエリに移動し、メインクエリで書式設定を実行します。個人的に

SELECT aggreatorid, '' AS txndesc, DATE_FORMAT(txndate, '%d/%m/%Y') AS txndate, 
    txncredit, txndebt 
FROM (
    SELECT a.aggreatorid AS aggreatorid, DATE(b.txndate) AS txndate, 
     SUM(txncredit) AS txncredit, SUM(txndebit) AS txndebit 
    FROM walletmast a 
    INNER JOIN wallettransaction b ON a.walletid=b.walletid 
    WHERE txndate BETWEEN CURDATE() - INTERVAL 3 DAY AND CURDATE() 
    GROUP BY a.aggreatorid, DATE(b.txndate) 
) AS x 
ORDER BY txndate DESC 
1
SELECT a.aggreatorid 
    , '' txndesc 
    , DATE_FORMAT(DATE(b.txndate),'%d/%m/%Y') dt 
    , SUM(txncredit) txncredit 
    , SUM(txndebit) txndebit 
    FROM walletmast a 
    JOIN wallettransaction b 
    ON a.walletid=b.walletid 
    AND txndate BETWEEN CURDATE() - INTERVAL 3 DAY AND CURDATE() 
    GROUP BY a.aggreatorid, dt, txndesc 
    ORDER BY txndate DESC 

、私はそうはJavaScriptやPHPのための運動ではなく、MySQLの

関連する問題