MS Access Query-如何仅根据输入日期定义日期范围
你好,我有一张表格,展示了审批流程中的步骤。
ID |OriginalID| OraclePricelistName |Change |ItemNumber| Modified | Approval|PCTask | OESTask
2363 | 5,529 | price_list1 | No | Item1 |2020-06-09| Approved|No task|No task
2352 | 5,529 | price_list1 |Workflow running | Item1 |2020-06-09| Approved|Ready |Ready
2332 | 5,529 | price_list1 |Workflow running | Item1 |2020-06-09| Approved|Ready |Pending
2325 | 5,529 | price_list1 |Workflow running | Item1 |2020-06-08| Approved|Pending|Pending
2312 | 5,529 | price_list1 |Workflow running | Item1 |2020-06-08| Pending |Pending|Pending
14422| 5,529 | price_list1 |No | Item1 |2020-01-15| Approved|No task|No task
14419| 5,529 | price_list1 |Workflow running | Item1 |2020-01-15| Approved|Ready |No task
14184| 5,529 | price_list1 |Workflow running | Item1 |2020-01-14| Approved|Pending|Pending
14121| 5,529 | price_list1 |Workflow running | Item1 |2020-01-13| Pending |Pending|Pending
11434| 5,529 | price_list1 |No | Item1 |2019-12-27| Approved|No task|No task
我的任务是创建一个查询,显示工作流的每个步骤何时完成,并根据输入日期过滤结果。我已经设法创建了查询的一部分,该部分确定了每个步骤的完成日期。但是,我很难仅通过输入日期来指定范围。我知道,当"更改"列的状态从"否"变为"工作流正在运行"时,每个新范围都会开始,当它变回"否"时,就会结束。我尝试使用别名列并按它们进行筛选,但没有成功。
PARAMETERS [CheckDate] DateTime;
SELECT DISTINCT archive_prices.ID, archive_prices.OriginalID, archive_prices.OraclePricelistName, archive_prices.Change, archive_prices.ItemNumber, archive_prices.CustomerItemNumber, archive_prices.Currency, archive_prices.Modified, archive_prices.Created, archive_prices.Approval, archive_prices.CSSTask, archive_prices.PCTask, archive_prices.OESTask, archive_prices.CSTask, archive_prices.MultiYear,
IIF([Change]='Workflow running' AND [Approval]='Pending' AND [PCTask]='Pending' AND [OESTask]='Pending',[Modified],'Blank') AS UpdateDate,
IIF([Approval]='Approved' AND [PCTask]='Pending' AND [OESTask]='Pending',[Modified],'Blank') AS ApprovalDate,
IIF([PCTask]='Ready' AND [OESTask]='Pending',[Modified],'Blank' ) AS OracleUpdate,
IIF([OESTask]='Ready',[Modified],'Blank') AS BacklogUpdate,
IIF([Change]='No',[Modified],"Blank") AS CompletedTask,
IIF([Change]='Workflow running',[Modified],"Blank") AS WorkflowTask,
IIF([CheckDate]>=Nz([CompletedTask]),1,IIF([CheckDate]>=Nz([WorkflowTask]),1,0)) AS Range
FROM archive_prices
WHERE (((archive_prices.OraclePricelistName)=[PriceList]) AND ((archive_prices.ItemNumber)=[PartNumber]))
ORDER BY archive_prices.Modified;
如果我在CheckDate参数中输入日期为2020年10月6日,则查询应给出以下结果:
ID OriginalID OraclePricelistName Change ItemNumber Modified Approval PCTask OESTask UpdateDate ApprovalDate OracleUpdate BacklogUpdate
2352 5,529 price_list1 Workflow running Item1 2020-06-09 Approved Ready Ready Null Null Null 2020-06-09
2332 5,529 price_list1 Workflow running Item1 2020-06-09 Approved Ready Pending Null Null 2020-06-09 Null
2325 5,529 price_list1 Workflow running Item1 2020-06-08 Approved Pending Pending Null 2020-06-08 Null Null
2312 5,529 price_list1 Workflow running Item1 2020-06-08 Pending Pending Pending 2020-06-08 Null Null Null
如果我输入日期为2020年10月1日,则查询应显示:
ID OriginalID OraclePricelistName Change ItemNumber Modified Approval PCTask OESTask UpdateDate ApprovalDate OracleUpdate BacklogUpdate
14419 5,529 price_list1 Workflow running Item1 2020-01-15 Approved Ready No task Null Null 2020-01-15 Null
14184 5,529 price_list1 Workflow running Item1 2020-01-14 Approved Pending Pending Null 2020-01-14 Null Null
14121 5,529 price_list1 Workflow running Item1 2020-01-13 Pending Pending Pending 2020-01-13 Null Null Null
我是新手,所以在这种情况下,我的方法很可能是错误的,我希望你能帮助我找到正确的方法。提前感谢!
由于您是新手,我建议您按部分进行,如下所示:
假设ID是自动编号和递增的,您可以创建名为"的第一个查询;Q1";像
Select OraclePricelistName, max(ID) from archive_prices GROUP BY OraclePricelistName HAVING change = "Workflow running"
以上内容将为您提供OraclePricelistName的最后一个ID,该ID是更改开始的位置。
然后你做第二个查询("Q2"(为:
Select OraclePricelistName, max(ID) from archive_prices GROUP BY OraclePricelistName HAVING change = "no"
以上内容将为您提供OraclePricelistName完成更改的最后一个ID。
然后你做
Select Q1.*, Q2.* from Q1 LEFT JOIN Q2 ON Q1.OraclePricelistName = Q2.OraclePricelistName
以上将显示您需要的数据。请注意,当Q2.id低于Q1.id时,表示已开始更改,但尚未关闭。