MS Access查询-如何仅基于输入日期定义日期范围
您好,我有一张桌子,展示了批准过程中的步骤。
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参数中输入日期06/10/2020,查询应给出以下结果:
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
如果我输入日期01/10/2020,则查询应显示:
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
我是新手,因此在这种情况下我的方法很可能是错误的,希望您能帮助我找到正确的方法。预先感谢!
答案 0 :(得分:0)
由于您是新手,所以建议您按部分进行操作,如下所示:
假设ID为自动编号且为增量,则可以创建第一个名为“ Q1”的查询,例如
Select OraclePricelistName, max(ID) from archive_prices GROUP BY OraclePricelistName HAVING change = "Workflow running"
以上内容将为您提供开始更改的OraclePricelistName的最后一个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时,表示更改已开始但尚未关闭。