2017-02-06 14 views
-2

私はmysqlの各グループの最初の行を選択しようとしています。私は例のように従ったHow to select the first row for each group in MySQL?奇妙な振る舞いでMysqlオーダーグループ

これは私のために何らかの理由で動作しません。私はstatemenetでグループを適用すると、次のSQL

SELECT stationID, vrID, vrsCreatedAt FROM (
SELECT VRS.stationID, VR.vrVehicleID, VRS.vrID, VRS.vrsCreatedAt FROM VehicleRoutes VR 
    LEFT OUTER JOIN VehicleRouteStations VRS ON VRS.vrID = VR.vrID 
    WHERE VR.vrRouteID = 8 AND VR.vrStatus = 'active' AND VR.vrID = 65 
    ORDER BY VRS.vrsCreatedAt DESC) x 

、結果セットを持つことは、私はこれはdefinetelyない

315 65 2017-01-17 13:53:33 

取得

SELECT stationID, vrID, vrsCreatedAt FROM (
SELECT VRS.stationID, VR.vrVehicleID, VRS.vrID, VRS.vrsCreatedAt FROM VehicleRoutes VR 
    LEFT OUTER JOIN VehicleRouteStations VRS ON VRS.vrID = VR.vrID 
    WHERE VR.vrRouteID = 8 AND VR.vrStatus = 'active' AND VR.vrID = 65 
    ORDER BY VRS.vrsCreatedAt DESC) x GROUP BY vrID 

43 65 2017-02-06 17:15:14 
9 65 2017-02-06 17:13:12 
42 65 2017-02-06 17:09:25 
41 65 2017-02-06 17:07:14 
69 65 2017-02-06 17:03:58 
........ 
42 65 2017-01-17 16:35:47 
63 65 2017-01-17 14:34:57 
322 65 2017-01-17 14:31:45 
315 65 2017-01-17 13:53:33 

です最初の行、最後の行。たとえ私が試してもORDER BY VRS.vrsCreatedAt DESC私は同じ動作を取得します。

私は以前使用していたので、これはうまくいくはずです。たぶん最新のMySQLバージョン5.7.17-0ubuntu0.16.04.1 (Ubuntu)でこれはもう動作しませんか?

ありがとうございました

+0

どのグループですか? aseはサンプルデータと期待される出力をロジックの説明とともに提供します。 – GurV

+0

'MIN(vrsCreatedAt) 'を試してください – marekful

+2

' GROUP BY'は集計されていない、グループ化されていないフィールドの特定の結果を保証するものではありません。 – Uueerdo

答えて

0

結果に必要なものを具体的に言う必要があります。 1つの行に複数の行が集約されています。

あなたがグルーピングしているフィールドについては、明らかに同じ値が得られますので、これは問題ではありません。他のすべてのフィールドは、で示唆されなければなりません。あなたは、不特定

  • 「(マックス 『または『分』または『合計』あなたは

    • のいずれかをあなたの集約など)で指定されたフィールドを取得し、同じフィールド」またはそのような何か』を得ることはありませんフィールド(ランダムではなく、そこに「ルール」がありますが、変更することができ、実装に依存します)

    下線:特定の結果を得たい場合は、これはgroup-by(サブクエリの結果を選択する)か、そのフィールドの集計を使用するだけです。