1

奇妙な問題があります。クエリを実行すると、データが表示されませんがResultset、列ヘッダーをクリックしResultSetて並べ替えると、行が表示されます。

私のテーブルは次のようになります -

id     user_id  action_id   object_id   MAX(s.timestamp)
2825    61  2   806 16/06/2012 03:41:55
2818    208 4   0   15/06/2012 15:11:30  -- problematic row
2817    21  7   1   15/06/2012 13:18:38
2816    208 4   0   15/06/2012 12:11:30  -- problematic row
2803    320 9   806 14/06/2012 23:14:32
2802    320 9   805 14/06/2012 17:15:54
2801    208 4   0   14/06/2012 15:11:30  -- problematic row

次のクエリを使用しています-

SELECT  MAX(activity_stream_id) id,
        s.user_id,
        s.action_id,
        s.object_id, 
        MAX(s.timestamp)
FROM pp_activitystream s
GROUP BY s.user_id, s.action_id, s.object_id 
ORDER BY s.timestamp DESC

理想的にはResultSet、「問題のある行」の一番上を取得する必要がありますが、そうではありません。列ヘッダーをクリックして行を並べ替えると、「問題のある行」が表示されます。

なぜこのように振る舞うのか教えていただけますか?

Toadandを使用して上記のクエリを実行しましMySQL Workbenchたが、同じように動作します。

実行後の出力 -

id     user_id  action_id   object_id   MAX(s.timestamp)
2825    61  2   806 16/06/2012 03:41:55
2817    21  7   1   15/06/2012 13:18:38
2803    320 9   806 14/06/2012 23:14:32
2802    320 9   805 14/06/2012 17:15:54

ソートする列ヘッダーをクリックした後の出力 (この場合はタイムスタンプ) -

id     user_id  action_id   object_id   MAX(s.timestamp)
2825    61  2   806 16/06/2012 03:41:55
2818    208 4   0   15/06/2012 15:11:30  -- row appears
2817    21  7   1   15/06/2012 13:18:38
2803    320 9   806 14/06/2012 23:14:32
2802    320 9   805 14/06/2012 17:15:54
4

1 に答える 1

2
SELECT  MAX(activity_stream_id) id,
        s.user_id,
        s.action_id,
        s.object_id, 
        MAX(s.timestamp) as ts
FROM pp_activitystream s
GROUP BY s.user_id, s.action_id, s.object_id 
ORDER BY ts DESC

Mysql では、grouped 列の中で非 ed 列を使用したり、節selectで非selected列を使用したりできます。order byそれがときどき魅力的または便利に感じるかもしれませんが (少なくとも私にとっては)、概念的に欠陥があり、見つけるのが非常に困難なエラーにつながる可能性があります。

この場合、select で集計列として表示される列を並べ替えようとしているため、予測できない結果が生じます。toad または mysql-workbench で結果セット テーブルのヘッダーをクリックすると、実際には mysql に on を注文するように指示されMAX(timestamp)、正常に動作します。

于 2012-06-16T12:38:17.557 に答える