MySQL ORDER BY一列和第二列

时间:2017-10-11 15:58:07

标签: mysql sql

我的问题不一样,但我已经阅读了类似的SO帖子: How can I order by two columns, if result is equal, consider another column?

我对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

这将获取数据并按日期对其进行排序(旧的> new),然后按id进行排序,但需要将所有相同的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

非常感谢任何建议!

2 个答案:

答案 0 :(得分:1)

它应该按顺序颠倒您的订单:

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

答案 1 :(得分:0)

首先,您的WHERE子句会将OUTER JOIN变为INNER JOIN。因此,甚至不需要JOIN。所以你的查询相当于:

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

然后,您可以使用JOIN获取所需信息:

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;