У меня есть запрос, который должен извлекать записи из нескольких таблиц, используя объединение, и фильтровать их все на основе диапазона дат. Кажется, что он вытягивает случайную группу записей - он не возвращает все записи в объединении, что, я думаю, было бы, если бы он полностью игнорировал даты, но записи, которые он извлекает, не соответствуют критериям даты.
Вот запрос; Я пробовал это двумя разными способами с одинаковым результатом.
Вариант 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 утра в дату начала до 23: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 и несколькими другими. Хорошей новостью является то, что он вытягивает все записи с датами между указанными в запросе; Плохая новость заключается в том, что случайно (из того, что я могу сказать) также добавляются другие записи, которые не соответствуют критериям.
Кто-нибудь может указать мне правильное направление? Я мог бы поклясться, что этот код работал несколько недель назад, но сейчас это не так, хотя в него не было никаких изменений.