我正在使用MS SQL进行查询,以显示我们"服务中心内的项目"在过去30天内不止一次。所需数据来自最近服务订单之前的服务订单,基于序列号。因此,如果在过去30天内收到了某个项目,请检查过去30天内是否收到该项目。
ServiceOrders表:CustID
,ItemID
,DateReceived
ItemMaster表:CustID
,ItemID
,SerialNumber
我可以使用
获取DateReceived项目ServiceOrders.DateReceived >= DATEADD(month,-1,GETDATE())
我可以将过去一个月的服务订单加载到临时表中,然后对其进行查询以获取先前的服务订单,但这听起来并不像最佳计划。有关获得以前服务订单的有效方法的任何想法?
示例数据
ServiceOrders表:
CustID ItemID DateReceived
1 2 9/26/2016
1 2 9/05/2016
1 2 1/15/2015
5 6 9/20/2016
7 6 9/02/2016
ItemMaster表:
CustID ItemID SerialNumber
1 2 8675309
5 6 101
7 6 101
所以在上面的例子中,SerialNumber 8675309和101在过去30天内收到了不止一次。我需要来自ServiceOrders和ItemMaster的数据,用于DateReceived 9/05/2016和09/02/2016记录(30天内最新的记录)。两个表中都有其他字段,但这里简化了它们。由于项目可以转移,因此CustID在日期之间不一定保持不变。 SerialNumber是关键。
答案 0 :(得分:2)
将上个月的订单过滤到公用表表达式中,并将其编号为降序。然后在cte2中选择出现次数超过1的项目,加入cte' s选择第二行。
;With cte as(
Select row_number() over(PARTITION by ItemID order by DateReceived desc) as RowNum, *
from ServiceOrders
where DateReceived >= DateAdd(Month, -1, Getdate())
), cte2 as(
Select
ItemID From cte
Group by ItemID
Having count(*)>1
)
select b.*, c.SerialNumber from cte2 as a
left join cte as b on a.ItemID= b.ItemID and b.RowNum=2
left join ItemMaster as c on b.ItemID=c.ItemID and b.CustID=c.CustID
答案 1 :(得分:0)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
<span class="language">
<a href="#">
ENG
</a>
<i class="fa fa-caret-down" aria-hidden="true"></i>
</span>
<ul class="languageDropdown">
<li>
<a href="#">
ABC
</a>
</li>
<li>
<a href="#">
ENGLISH
</a>
</li>
<li>
<a href="#">
SPANISH
</a>
</li>
<li>
<a href="#">
ARABIC
</a>
</li>
<li>
<a href="#">
TELUGU
</a>
</li>
</ul>
粘贴到Excel
过滤最后一列以显示结果=或&gt;比2
可能是您的快速解决方案。
答案 2 :(得分:0)
获取过去30天内收到的物品不止一次。然后使用import rpy2.robjects as ro
ro.r('invlogit <- function(x){ + exp(x)/(1 + exp(x)) }')
p = ro.r('curve(invlogit({0} + {1}*x), add = TRUE)'.format(a,b))
根据date_received的降序对行进行编号。最后,获取row_number为2的行(最近30天内最后一个日期之前的日期)。
如果输出中需要serialnumber,只需将row_number
itemmaster表添加到最终结果集。
join