我正在尝试编写查询以查找出现在我的数据集中的新订单项。例如,我有以下表结构。
逻辑需要确定自上次billedmonth以来该订单项是否为新
表A
所以如果我用英文写的话。
选择IF'CLI'& '描述'& BilledMonth -1
不存在'UnitCost'我已设法创建一个联接,显示上一个结算月是否存在。
但我真的很挣扎于负面逻辑(即这个月的订单项是新的)
非常感谢任何帮助。
答案 0 :(得分:0)
SELECT t.CLI, t.Description
FROM yourTable t
LEFT JOIN yourTable t2
ON t.CLI = t2.CLI
AND t.Description = t2.Description
AND t.UnitCost = t2.UnitCost
AND t.BilledMonth - 1 = t2.BilledMonth
WHERE t2.CLI is null
答案 1 :(得分:0)
我认为sql server支持分析函数,所以这样的东西应该可以工作:
select CLI, Description, UnitCost, billedMonth
from (
select CLI, Description, UnitCost, billedMonth
count(*) over (partition by CLI, Description, UnitCost order by billedMonth) cnt
from mytable
) where cnt = 1
如果这是有效的,它很可能比基于连接的select语句更有效,更快。