2017-10-11 7 views
0

私の質問は異なっているが、私はSOのポストこの同様のを読んだ: How can I order by two columns, if result is equal, consider another column?MySQLの1 ORDER BY列、第2列

を私は2列に興味があります:

  • 日付をproduction_id

クエリは次のとおりです。

SELECT BATCH_ISSUED.production_id, MANUFACTURE_DATE.date 
FROM BATCH_ISSUED LEFT JOIN 
    MANUFACTURE_DATE 
    ON BATCH_ISSUED.production_id = MANUFACTURE_DATE.production_id 
WHERE MANUFACTURE_DATE.active='1' 
ORDER BY MANUFACTURE_DATE.date ASC,BATCH_ISSUED.production_id ASC 

これはデータをフェッチし、日付(old> new)でソートしてからidでソートしますが、同じすべてをグループ化する必要があります。GROUP BYは何とか組み込む必要があります。

データの例:

195 2017-10-10 
196 2017-10-10 
196 2017-10-10 
258 2017-10-10 
258 2017-10-10 
189 2017-10-12 
190 2017-10-12 
258 2017-10-12 
212 2017-10-13 
213 2017-10-13 

それは、ID 258と、たとえば、次のように提示しなければならないが、日付順に一緒に保管

:任意の提案のための

195 2017-10-10 
    196 2017-10-10 
    196 2017-10-10 

    258 2017-10-10 
    258 2017-10-10 
    258 2017-10-12 

    189 2017-10-12 
    190 2017-10-12 
    212 2017-10-13 
    213 2017-10-13 

多くの感謝!

+0

SELECT md.production_id, md.date FROM MANUFACTURE_DATE md WHERE md.active = 1 ORDER BY md.date ASC, md.production_id ASC; 

次に、あなたが欲しい情報を得るためにJOINを使用することができますあなたのSQLクエリのような?サンプルデータとは何ですか?期待される出力は? – SMA

答えて

0

最初に、WHERE句はOUTER JOININNER JOINに変えます。その結果、JOINも必要ありません。だからあなたのクエリは同等です:それは順序によってあなたの順序を反転させるためにenoughtです

SELECT md.production_id, md.date 
FROM MANUFACTURE_DATE md JOIN 
    (SELECT md2.production_id, MIN(md2.date) as mind 
     FROM MANUFACTURE_DATE md2 
     WHERE md.active = 1 
     GROUP BY md2.production_id 
    ) mmd 
    ON md.production_id = md2.production_id 
WHERE md.active = 1 
ORDER BY mdd.mind ASC, md.production_id ASC, md.date; 
1

ORDER BY BATCH_ISSUED.production_id DESC, MANUFACTURE_DATE.date ASC, 
+0

ごめんなさい@エミリーScarpettaしかし私はあなたの解決策が半分私の問題を解決することがわかります。 私の質問からのサンプルデータを続行するので、あなたのコードはID 258を一緒に保ちますが、他のIDの日付順は最も古いものから最新のものにソートされません。あなたの提案をありがとう私はあなたに肯定的な投票を与えた –

関連する問題