3

在 Access Query 中过滤日期时,如何确保获取正确数量的记录:

SELECT ID, REF, SalesDate, DCount("ID","tblRecords"," Ref='" & [Ref] & "' AND [SalesDate]=#" & format([SalesDate],"yyyy/mm/dd") & "#") as EXPR1 from tblCurrent 

如果它不能被误解,例如 28-04-12,它会选择日期,但如果它是 04-06-12,它不会选择它,因为它假设它是错误的方式。

请注意,此查询不是即时创建的,也不是从表单等生成的......

4

1 回答 1

6

我要么使用 yyyy/mm/dd 作为 VBA 中的日期:

#" & Format([SalesDate],"yyyy/mm/dd") & "#"

或参数,用于构建查询。

编辑重新附加信息

看到你用的是SQL server,我建议你用一个派生表,你可能会发现它更快,例如:

SELECT dbo_Table_1.ADate, ACount FROM dbo_Table_1
LEFT JOIN (SELECT a.ADate,Count(*) As ACount 
           FROM  dbo_Table_1 As a GROUP BY a.ADate) b
ON dbo_Table_1.Adate=b.ADate

编辑重新讨论

SELECT * FROM dbo_vwRecordsCurrent As t 
LEFT JOIN (
   SELECT a.OpptyIncentiveModifiedDate, a.DataSetID, Count(*) AS ACount 
   FROM dbo_vwRecordsHistorical AS a 
   WHERE a.OpportunityIgnored = True 
   GROUP BY a.OpptyIncentiveModifiedDate, a.DataSetID) AS h 
ON t.OpptyIncentiveModifiedDate = h.OpptyIncentiveModifiedDate 
AND t.DataSetID = h.DataSetID

由于名称很长,我给你的表加上了别名,所以对我来说,在外部 sql 上使用别名更具可读性。它们在内部 sql 中是必不可少的。使用现有表的名称为派生表起别名并不是一个好主意。

于 2012-07-23T09:42:53.403 回答