繁体   English   中英

SQL GROUP BY 查找最大日期

[英]SQL GROUP BY find max date

我有一个表Item,Pricelist1,HisDate和另一个表有Pricelist2

在以下查询中,我用于查找pricelist1pricelist2小于用户输入日期

(Select
    MAX(ZA.CDU_HisDate) 'HISDATE',
    ZA.CDU_Item,
    ZA.CDU_CPrice1,
    ZB.CDU_Price2
 from TDU_PriceHistory ZA
 INNER Join TDU_PriceListDetails ZB on 
     ZA.CDU_CArtigo=ZB.CDU_Item and ZA.CDU_PL=ZB.CDU_PriceList
 where ZA.CDU_HisDate <= @todate
     and ZA.CDU_PL ='PL03'
 group by 
     ZA.CDU_cartigo,
     ZA.CDU_CPrice1,
     ZB.CDU_Price2
)

如果我仅通过cartigo使用GROUP by ,那就完美了。 如果我使用GROUP BY Item,Price1,Price2那么它的所有可用日期和价格详细信息。

我只想找到最大日期和相关价目表

如果我对你的问题理解正确,答案可能是这样的。

WITH 
    MaxDateForItem AS ( --  The max hisdate of item for user input date
        SELECT ZA.CDU_Item, MAX(ZA.CDU_HisDate) Max_CDU_HisDate 
        FROM TDU_PriceHistory ZA 
        WHERE ZA.CDU_HisDate <= @todate
            AND ZA.CDU_PL = 'PL03'
    ),
    ItemPriceAtMaxDate AS (
        SELECT T1.CDU_Item, T1.CDU_CPrice1, T1.CDU_HisDate, T1.CDU_CArtigo, T1.CDU_PL
        FROM TDU_PriceHistory T1
        INNER JOIN MaxDateForItem T2 ON T1.CDU_Item = T2.CDU_Item AND T1.CDU_HisDate = T2.Max_CDU_HisDate
        WHERE T1.CDU_PL = 'PL03'
    )
SELECT TMP1.CDU_HisDate AS HISDATE, TMP1.CDU_Item, TMP1.CDU_Price1, ZB.CDU_Price2
FROM ItemPriceAtMaxDate TMP1
INNER JOIN TDU_PriceListDetails ZB ON TMP1.CDU_CArtigo = ZB.CDU_Item
    AND TMP1.CDU_PL = ZB.CDU_PriceList;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM