按其自己的一列和子串分组

时间:2015-03-21 11:43:21

标签: sql

无法为我的问题编写Sql。 我有一个包含2列项目代码和到期日期的表格。

Itemcode.       Expiration
Abc123.         2014-08-08
Abc234.         2014-07-07
Cfg345.         2014-06-06
Cfg567.         2014-07-08

输出应基于项目代码的前3位数字和最小的expirarion日期,如下所示

Abc.     2014-07-07.    Abc234
Cfg.     2014-06-06.    Cfg345

由于

EDITED: 查询就是这样,实际上是连接多个表来获取itemcode和expiration。     选择substr(y.itemcode,1,3),                               min(x.expiration_date)到期,                               y.itemcode
                              来自X x,Y y                               其中y.id = x.id

                          and x.number  in 
                              (select number from xyz 
                                where id = x.id
                                and codec in ('C', 'M', 'T', 'H')

                               ) 

                               group by substr(y.itemcode,1,3), y.itemcode

1 个答案:

答案 0 :(得分:0)

我不熟悉“m”。这是ANSI标准SQL解决方案:

select substring(itemcode, 1, 3), expiration, itemcode
from (select t.*,
             row_number() over (partition by substring(itemcode, 1, 3)
                                order by expiration desc
                               ) as seqnum
      from table t
     ) t
where seqnum = 1;

大多数数据库都支持此功能。有些名称可能略有不同(例如substr()left()用于子字符串操作。)