‘上次纯手码的,没经过测试,改一下函数,仅取符合条件商品的开始日期,避免重复运行
点击下载此附件
Function StartDate(次数 As Integer, 商品名称 As String) As Date
Dim i As Integer
StartDate = Date + 1
For i = 1 To 次数
StartDate = DMax("采购时间", "采购明细表", "商品名称='" & 商品名称 & "' and 采购时间<#" & StartDate & "#")
If (DLookup("采购数量", "采购明细表", "商品名称='" & 商品名称 & "' and 采购时间=#" & StartDate & "#")) < 500 Then
StartDate = Date '不够5次不显示
Exit Function
End If
If StartDate = DMin("采购时间", "采购明细表", "商品名称='" & 商品名称 & "'") Then
Exit Function
End If
Next
End Function
’查询符合条件的商品以及开始日期
SELECT 采购明细表.商品名称, StartDate(5,[商品名称]) AS 开始日期
FROM 采购明细表
GROUP BY 采购明细表.商品名称, StartDate(5,[商品名称])
用临时表+查询的方式:
Private Sub Command0_Click()
Dim rst As Recordset, i
Set rst = CurrentDb.OpenRecordset("select 商品名称 from 采购明细表 group by 商品名称")
For i = 1 To rst.RecordCount
CurrentDb.Execute "insert into 条件 (商品名称,采购时间,采购数量,采购单价) select top 5 商品名称,采购时间,采购数量,采购单价 from 采购明细表 where 商品名称='" & rst.Fields(0) & "' ORDER BY 采购时间 DESC"
rst.MoveNext
Next i
End Sub
运行上面过程,获得每种商品的最近5次采购数据,追加到临时表“条件”,然后创建以下语法的查询,并运行:
SELECT 条件.商品名称, 条件.采购时间, 条件.采购数量, 条件.采购单价
FROM 条件
GROUP BY 条件.商品名称, 条件.采购时间, 条件.采购数量, 条件.采购单价
HAVING (((DCount("ID","条件","商品名称='" & [商品名称] & "' AND 采购数量>=500"))>4));
天马行空老师:我下载了附件试用了一下,发现查询1中a的开始日期为“2018-11-28“,而表中没有这一日期,望能再看看。谢谢!
因为a不符合近期连续5次采购数量大于500,开始日期大于当天相当于不显示a的记录
明白了。再请教一下,如果希望通过窗体输入连续的次数(如:5、7、10次等)来增加灵活性,不用每次去修该次数,应如何实现?谢谢!!
SELECT 条件.商品名称, 条件.采购时间, 条件.采购数量, 条件.采购单价
FROM 条件
GROUP BY 条件.商品名称, 条件.采购时间, 条件.采购数量, 条件.采购单价
HAVING (((DCount("ID","条件","商品名称='" & [商品名称] & "' AND 采购数量>=500"))>4));
以上通过创建查询,运行正常,但修改为;
sll="SELECT 条件.商品名称, 条件.采购时间, 条件.采购数量, 条件.采购单价" _
& "FROM 条件" _
& "GROUP BY 条件.商品名称, 条件.采购时间, 条件.采购数量, 条件.采购单价" _
& "HAVING (((DCount('ID','条件','商品名称='" & [商品名称] & "' AND 采购数量>=500'))>4));"
DoCmd.RunSQL sll
提示错误“2465” 不能找到表达式中引用的字段。
如不加商品名称内容,不提示错误。望各位老师指导解决。谢谢!!
总记录:10篇 页次:1/1 9 1 :