【发布时间】:2018-06-27 09:24:26
【问题描述】:
我有上面的 2 个表和它们各自的列。
HEADER
PO_Number (char)
CUSTNMBR (char)
Expiry_Date (datetime)
PO_Status (tinyint, 0 = Open, 1 = Closed)
STATUSDATE (datetime)
BATCH
PORDNMBR (char)
CUSTNMBR (char)
BTCHID (char)
DATE1 (datetime)
在 HEADER 表中,主键是 (PO_Number, CUSTNMBR)。 在 BATCH 表中,BTCHID 是主键。 DATE1 列是输入相应批次的日期。 此外,对于 HEADER 表中的每个 (PO_Number, CUSTNMBR) 组合,可能在不同日期输入多个 BTCHID。 我的截止日期是 2016-07-12,有截止日期之前的批次和截止日期之后的批次。
我需要识别那些在截止日期之后没有输入任何批次的 (PO_Number, CUSTNMBR) 组合,其中 Expiry_Date 表单 HEADER 是
我最初编写了以下查询,但结果是带来了截止日期之后也有批次的记录。我已经通过键入 PODNMBR 验证了使用 SELECT * from BATCH 查询,结果我可以看到截止日期之前和之后的批次。有什么方法可以识别那些在截止日期之后没有输入任何批次的那些,并且 Expiry_Date 表单 HEADER 是
SELECT BATCH.PORDNMBR, BATCH.CUSTNMBR, BATCH.BTCHID, BATCH.DATE1,
HEADER.PO_Number, HEADER.CUSTNMBR, HEADER.Expiry_Date, HEADER.PO_Status, HEADER.STATUSDATE
FROM BATCH
INNER JOIN
HEADER
ON
BATCH.CUSTNMBR = HEADER.CUSTNMBR
AND
BATCH.PORDNMBR = HEADER.PO_Number
WHERE BATCH.Expiry_Date < '2016-07-12 00:00:00'
AND BATCH.DATE1 < '2016-07-12 00:00:00'
【问题讨论】:
-
添加一些示例表数据和预期结果。 (作为格式化文本,而不是图像。)考虑在您花费太多时间之前阅读stackoverflow.com/help/mcve!
-
顺便说一句,您使用的是哪个 dbms?在日期/时间方面,许多产品远不符合 ANSI SQL。
-
我正在使用 SQL Server。
标签: sql sql-server tsql