我有一个查询应该使用连接从多个表中提取记录,并根据日期范围过滤所有这些记录。它似乎是拉随机组的一组记录 - 它不会返回连接中的所有记录,我想如果它完全忽略了日期,那么它会拉动的记录与日期标准不匹配。
这是查询;我尝试了两种不同的方法,结果相同。
选项1:
SELECT p.PurchActvtyID, p.PurchAmt, p.CcAuthCode, p.PurchDT, v.VoucherNbr,
a1.name as billName, a1.company as billCompany, a1.address1
FROM arrc_PurchaseActivity p
LEFT JOIN arrc_Voucher v ON p.VoucherID = v.VoucherID
LEFT JOIN jos_customers_addresses a1 ON p.AcctID = a1.id
where v.TypeFlag='S' or v.TypeFlag is null
and p.PurchDT between '20101201000000' and '20101209235959' order by v.ActivatedDT asc
(在这种情况下,我们以编程方式将时间添加到起始和结束范围,以确保我们从开始日期的上午12:01到结束日期的晚上11:59获取每条记录。)
选项2:
SELECT p.PurchActvtyID, p.PurchAmt, p.CcAuthCode, p.PurchDT, v.VoucherNbr,
a1.name as billName, a1.company as billCompany, a1.address1
FROM arrc_PurchaseActivity p
LEFT JOIN arrc_Voucher v ON p.VoucherID = v.VoucherID
LEFT JOIN jos_customers_addresses a1 ON p.AcctID = a1.id
where v.TypeFlag='S' or v.TypeFlag is null
and p.PurchDT between '2010-12-01' and '2010-12-09' order by v.ActivatedDT asc
我要回的是p.PurchDT等于2010-10-28 16:33:13,2010-11-11 10:37:30以及其他几个人的记录。好消息是它将所有记录与查询中指示的日期之间的日期相提并论;坏消息是它是随机的(据我所知)还会引入其他不符合标准的记录。
有人能指出我正确的方向吗?我可以发誓这个代码几个星期前正在运行,但现在不是,即使它没有任何变化。
答案 0 :(得分:0)
这可能是因为你需要():
where (v.TypeFlag='S' or v.TypeFlag is null)
日期不正确的结果都会有TypeFlags ='S',对吗?
此外,如果你在中间使用日期,你应该使用你想要的最后一天,否则,最后一天只会包含PurchDT = 2010-12-09 00:00:00
的记录,那一天的所有其他内容都会被忽略 - 我猜。