MySQL按一列和第二列排序

MySQL按一列和第二列排序,mysql,sql,Mysql,Sql,我的问题不同,但我读过类似的SO帖子: 我对两个专栏感兴趣: 生产标识 日期 查询是: 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.activ

我的问题不同,但我读过类似的SO帖子:

我对两个专栏感兴趣:

  • 生产标识
  • 日期
查询是:

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
这将获取数据并按日期(旧的>新的)排序,然后按
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

非常感谢您的建议

首先,您的
WHERE
子句将
外部联接
转换为
内部联接
。因此,甚至不需要
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;

按顺序颠倒顺序就足够了:

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

您的sql查询是什么样的?样本数据是什么?预期的结果是什么?抱歉@Emily Scarpetta,但我发现你的解决方案只解决了我问题的一半。继续我的问题中的示例数据,因此是的,您的代码将ID 258保留在一起,但其他ID的日期顺序未排序为最旧>最新。谢谢你的建议我投了你赞成票