如果列B是最早的日期,则在列A中显示值。

时间:2013-04-17 02:26:11

标签: mysql sql

我在下表中遇到了困难。表A,在执行我的脚本时只是我当前表的一部分,还有其他列和行,但我只是拿出它的一部分,我认为能够理解我的问题是有用的。场景:客户购买带有序列IA003的10个itemA,但是当我执行我的查询时,它会显示TABLE A结果。我想要的是当客户订购10件特定商品时,它应该与该商品的系列内联显示,而不是所有具有该商品名的连续商品。或者,如果客户订购了ItemA,那么它将查找最接近的截止日期,无论它具有什么序列号。     非常感谢

### Table A ### 

ITEMNAME ||    SERIALS  || EXPIRATION DATE  ||   SO_QTY      
ITEM A        IA0001         2014-01-20           10         
ITEM A        IA0002         2014-01-01           10        
ITEM A        IA0003         2013-05-13           10         
ITEM B        IB001          2012-11-08           15       
ITEM B        IB002          2015-12-28           15        
ITEM B        IB003          2014-06-01           15       


### how will i get this output? ### 

###表A ###

ITEMNAME      SERIALS      EXPIRATION DATE       SO_QTY      
ITEM A         IA0001         2014-01-20                
ITEM A         IA0002         2014-01-01                      
ITEM A         IA0003         2013-05-13            10         
ITEM B         IB001          2012-11-08           15          
ITEM B         IB002          2015-12-28                     
ITEM B         IB003          2014-06-01                        

1 个答案:

答案 0 :(得分:0)

您可以使用EXPIRATIONDATE使用子查询加入表格,该子查询为Itemname 获取最早的LEFT JOIN,以便您可以测试记录是否为每个ItemName最早的。

SELECT  a.ItemName,
        a.Serials,
        a.EXPIRATIONDATE,
        IF(b.Itemname IS NULL, NULL, a.SO_QTY) SO_QTY
FROM    TableA a
        LEFT JOIN
        (
            SELECT  Itemname, MIN(EXPIRATIONDATE) min_date
            FROM    TableA
            GROUP   BY ItemName
        ) b ON  a.Itemname = b.Itemname AND
                a.EXPIRATIONDATE = b.min_date