SQL高级排序

时间:2014-03-06 14:47:42

标签: sql

我在一个非常古老的(13年左右)SQL数据库程序中对数据组进行排序时遇到了问题。数据如下所示:

    Entry     Batch  Time
    1         1      7-1-2013 13:35
    2         1      3-3-2014  7:48
    3         1      1-2-2014 18:49
    4         2      3-1-2011 13:23
    5         2      5-3-2014 20:48
    6         2      7-2-2014  3:11
    7         3      2-3-2012 15:09
    8         3      5-3-2014 10:37
    9         3      6-2-2014  7:16

我想通过将来自相同批次的那些分组在一起来对条目进行排序,然后根据这些组中的最低时间条目对它们进行排序。在此示例中,组顺序为2-3-1,输入顺序为4-6-5-9-7-8-1-3-2

有没有简单的方法可以做到这一点?我尝试过订购(选择等等),但到目前为止还没有成功。任何帮助将不胜感激:))

1 个答案:

答案 0 :(得分:1)

如果我正确阅读,您希望先按照组中最早的日期对组进行排序,然后按时间排序。

如果这是oracle或sql server,您可以使用分析:

select Entry, 
       Batch, 
       Time
from ( select Entry, 
              Batch, 
              Time, 
              MIN(Time) OVER (PARTITION BY Batch) AS MinTime
       from MyTable ) MyTable2
order by MinTime, Time

如果您没有支持此功能的数据库,可以尝试以下操作:

select MyTable.Entry, 
       MyTable.Batch, 
       MyTable.Time
from MyTable
join ( select Batch, MIN(Time) AS MinTime
       from MyTable ) MyTable2 on MyTable.Batch = MyTable2.Batch
order by MyTable2.MinTime, MyTable.Time