2014-11-25 90 views
0

我想开发代码,将允许查询中的子集内进行排序。我有三个字段“batchid”,“month”和“year”。每批可能有几个月和一年以上。我需要的最终订单是最高月份组合。SQL语句来查询

下表我希望说明了这一点。

Batch Month Year 
5  12  2013 
     1  2014 
6  11  2013 
     3  2014 
4  1  2014 
     2  2014 

所要求的顺序是

Batch Month Year 
5  12  2013 
     1  2014 
4  1  2014 
     2  2014 
6  11  2013 
     3  2014 

你可以看到每个批次进行排序以批处理的最新日期和每批责令该批次的最后日期。 我已经尽可能的一年而言,但无法弄清楚月份得到它。 第一个语句确定的最低和最高的日期。

我是新来这个论坛,并使用VBA没有经历过这件事,也没有beanpole得到的SQL语句到这个职位,所以我道歉呐希望这可能是有意义的。

回答

0
SELECT t1.batch, t1.month, t1.year 
FROM tmp t1 
JOIN 
(SELECT batch, max(year*12+month) mord FROM tmp GROUP BY batch ORDER BY mord) t2 
ON t2.batch = t1.batch 
ORDER BY t2.mord, t1.year, t1.month 

产生

+-------+-------+------+ 
| batch | month | year | 
+-------+-------+------+ 
|  5 | 12 | 2013 | 
|  5 |  1 | 2014 | 
|  4 |  1 | 2014 | 
|  4 |  2 | 2014 | 
|  6 | 11 | 2013 | 
|  6 |  3 | 2014 | 
+-------+-------+------+