我正在编写我的第一个 SQL 查询,所以请原谅我对此事缺乏了解。
我希望从每个连接中过滤多次,并且执行的查询总行数似乎在增长,而不是在缩小。
/*
Reads Order Status, determines if it's OPEN
Pulls all OPEN orders to Time Tickets
Reads the Time Ticket TicketDate, determines if it's > 90 days old
Compares PODet JobNo, joins PO table
Reads the PO DateMod, determines if it's > 90 days old
*/
DECLARE @now DATETIME
DECLARE @90daysago DATETIME
SET @now = GETDATE()
SET @90daysago = DATEADD(day, -90, @now)
SELECT
o.JobNo,
o.OrderNo,
o.PartNo,
o.Status,
o.JobNo,
t.TicketDate,
p.Status,
p.OutSideService,
p.PONum,
po.DateEnt,
po.DateMod
FROM
RBCBEMD.dbo.OrderDet AS o /* OrderDet = o */
INNER JOIN RBCBEMD.dbo.TimeTicketDet AS t /* TimeTicket = t */
ON o.JobNo = t.JobNo
INNER JOIN RBCBEMD.dbo.PODet AS p /* PODet = p */
ON o.JobNo = p.JobNo
INNER JOIN RBCBEMD.dbo.PO AS po /* PO = po */
ON p.PONum = po.PONum
WHERE
o.Status = 'Open' AND
t.TicketDate <= @90daysago AND
po.DateMod <= @90daysago
ORDER BY
cast(t.TicketDate as DATETIME) DESC
该查询应该从 OrderDet 表中查找 OPEN 订单。从那里,如果它是 OPEN,则从 TimeTicketDet 表中提取最后一个 TicketDate。确定 TicketDate 是否大于 90 天。如果超过 90 天,则从 PO 表中提取 PONum,找到它的 DateMod 并确定它是否超过 90 天。
如果 (o.status ='Open') AND (t.ticketDate >90 days old) AND (po.DateMod >90 days old) 然后发布 JobNo 的结果。
哦,我在第二次阅读您的需求后看到了问题。您只想从 TimeTicketDet 表中提取最后一个票证日期。您需要一个简单的不存在来删除重复的行:
DECLARE @now DATETIME
DECLARE @90daysago DATETIME
SET @now = GETDATE()
SET @90daysago = DATEADD(day, -90, @now)
SELECT
o.JobNo,
o.OrderNo,
o.PartNo,
o.Status,
o.JobNo,
t.TicketDate,
p.Status,
p.OutSideService,
p.PONum,
po.DateEnt,
po.DateMod
FROM
RBCBEMD.dbo.OrderDet AS o /* OrderDet = o */
INNER JOIN RBCBEMD.dbo.TimeTicketDet AS t /* TimeTicket = t */
ON o.JobNo = t.JobNo
INNER JOIN RBCBEMD.dbo.PODet AS p /* PODet = p */
ON o.JobNo = p.JobNo
INNER JOIN RBCBEMD.dbo.PO AS po /* PO = po */
ON p.PONum = po.PONum
WHERE
o.Status = 'Open' AND
t.TicketDate <= @90daysago AND
po.DateMod <= @90daysago
and not exists (
select 1
from RBCBEMD.dbo.TimeTicketDet as t2
where t2.JobNo = o.JobNo
and t2.TicketDate > t.TicketDate
)
ORDER BY
cast(t.TicketDate as DATETIME) DESC
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句