【发布时间】:2021-06-28 20:42:56
【问题描述】:
我正在尝试让所有仍处于打开状态的票在指定的“关闭”日期前 7 天,而“开票日期”在 7 天后。门票看起来像:
Work Order: Description: Status: Task: End Date: Billed On:
---------------------------------------------------------------------------
INC1234 Broken Monitor OPEN 1 03/25/2021 03/25/2021
INC1235 No Audio OPEN 1 04/03/2021 04/01/2021
理论上,查询只会返回INC1234,因为此票证符合条件。工单号、描述、开单日期和状态存储在一个表中,任务存储在另一个表中,结束日期存储在第三个表中。
我有什么:
SELECT DISTINCT
wo.proposal AS 'Work Order',
wo.description AS 'Description',
wo.status_code AS 'Status',
phs.task AS 'Task',
wo.act_end_dt AS 'End Date',
fnd.tranx_date AS 'Billed On'
FROM
table1 wo
LEFT OUTER JOIN
table2 phs ON (wo.proposal = phs.proposal)
LEFT OUTER JOIN
table3 fnd ON (wo.proposal = fnd.proposal)
WHERE
wo.status_code = 'OPEN'
AND phs.act_end_dt <= DATEADD(day, -7, GETDATE())
AND fnd.tranx_date <= DATEADD(day, -7, GETDATE())
有时一张票会收取多张账单。此查询似乎只获取第一个计费交易而不是最新交易。 (因此,如果它在 3 月 23 日和 3 月 31 日有账单,它只会抓住 3 月 23 日,这是不正确的)我似乎无法让它抓住最新的账单日期并从那时起 7 天。
【问题讨论】:
-
left join在这里没有意义,应该是inner join。你为什么distincting?它不是抓取第一笔交易,而是抓取那些日期内的所有交易。您需要的是类似于exists在事务表上检查是否有任何给定的proposal在日期之前。 -
@Charlieface 有时它会多次返回同一张票。就像现在我运行它,它显示一张票证相同的票证#、描述、状态、任务#、结束日期和交易日期 - 所以我试图阻止它,但它似乎不起作用。
-
那么您的联接有问题。告诉我们这些表实际上是什么以及它们如何相互关联(主键和外键)会有很大帮助
标签: sql sql-server date-arithmetic