基于多个条件的mySQL ORDER

时间:2018-12-12 19:02:10

标签: mysql

我的实际表比这更深入,但让我们假设我有一个像这样的表...

Record_ID     Due_Date     Style
=========     ==========   =====
100           2018-01-01   10
101           2018-01-02   20
102           2018-01-03   12
103           2018-01-04   10
104           2018-01-05   20
105           2018-01-06   12
106           2018-01-02   10

我想要的是一个查询,该查询将确定第一个到期日,然后将其与其他所有具有相同样式的记录一起返回,而与到期日无关。然后应在下一个其他样式的到期日期之后继续操作。成功的输出将按此顺序...

Record_ID     Due_Date     Style
=========     ==========   =====
100           2018-01-01   10
106           2018-01-02   10
103           2018-01-04   10
101           2018-01-02   20
104           2018-01-05   20
102           2018-01-03   12
105           2018-01-06   12

如果仅查看每个Style的第一条记录,则输出是有序的。 查看记录100,101,102

如果查看给定Style的所有记录,则输出将按日期排序。 查看记录100,106,103

如果仅查看Style列,则输出将所有类似的Style在一起,但不一定是数字顺序。

通过具有此输出,可以很容易地看出Style首先应该是什么,但是同一Style中的所有记录将在继续进行下一个Style之前完成< / p>

1 个答案:

答案 0 :(得分:2)

这里是使用子查询的一个选项,该子查询使用相应的min(duedate)创建样式的分组。然后,您join回到原始表并order by那个日期。

select *
from yourtable t join (
  select min(duedate) minduedate, style
  from yourtable
  group by style) t2 on t.style = t2.style
order by t2.minduedate, t.duedate