【发布时间】:2017-06-16 00:31:39
【问题描述】:
我有一个产品表prdtbl和一个销售历史表postdt
我需要退回最近销售日期的产品,目前我收到重复的产品,其中列出了所有过去的销售,而不仅仅是最近的。
SELECT prdtbl.prdcod,
prdtbl.stkqty,
prdtbl.ordqty,
prdtbl.csoqty,
postdt.crtdat as LastPurchase
FROM (prdtbl
LEFT JOIN postdt ON prdtbl.prdcod=postdt.itmcod)
WHERE prdtbl.prdcod NOT LIKE '*%'
AND (prdtbl.prdcod NOT LIKE 'CO%'
or (prdtbl.prdcod LIKE 'CO%' AND prdtbl.stkqty >0 OR prdtbl.ordqty >0 OR prdtbl.csoqty >0))
AND (postdt.crtdat >= '2014-01-01'
OR (postdt.crtdat < '2014-01-01' AND prdtbl.stkqty >0 OR prdtbl.ordqty >0 OR prdtbl.csoqty >0))
GROUP BY prdtbl.prdcod, postdt.crtdat, prdtbl.ordqty, prdtbl.stkqty, prdtbl.csoqty
ORDER BY prdtbl.prdcod DESC, MAX(postdt.crtdat) DESC
我已经尝试了以下方法,但是由于 postdt 表非常大,返回需要很长时间
AND postdt.crtdat IN ( SELECT MAX(postdt.crtdat) FROM postdt GROUP BY prdtbl.prdcod)
在最初的 SELECT 查询中,我也尝试过使用以下内容,但这仍然返回重复的产品代码
MAX(postdt.crtdat) as LastPurchase
希望这是有道理的,我仍然对 SQL 有所了解!
【问题讨论】:
-
听起来您想使用
distinct关键字? w3schools.com/sql/sql_distinct.asp -
您可能想发布原始数据和预期结果...这里有很多选择
标签: sql postgresql select