[英]SQL GROUP BY find max date
我有一个表Item,Pricelist1,HisDate
和另一个表有Pricelist2
。
在以下查询中,我用于查找pricelist1
和pricelist2
小于用户输入日期
(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.