Меня попросили помочь в разработке отчета для получения 25% выборки случайных транзакций в течение определенного диапазона дат. Я не программист, но я смог довольно быстро разработать следующее:
SELECT TOP 25 PERCENT account.CID, account.ACCT, account.NAME, log.DATE, log.action_txt, log.field_nm, log.from_data, log.to_data, log.tran_id, log.init
FROM account INNER JOIN log ON account.ACCT = log.ACCT
GROUP BY account.CID, account.ACCT, account.NAME, log.DATE, log.action_txt, log.field_nm, log.from_data, log.to_data, log.tran_id, log.init
HAVING (((log.DATE) Between #2/7/2018# And #6/15/2018#) AND ((log.action_txt)="mod" Or (log.action_txt)="del") AND ((log.init)="J1X"
ORDER BY log.tran_dt
Это возвращает 25% записей в диапазоне дат. Каждая строка записи уникальна, но каждый номер счета потенциально может иметь несколько записей каждый день. В некоторых случаях записи имеют одинаковую дату и tran_id.
После дальнейшего обсуждения с отправителем запроса он на самом деле хочет увидеть все транзакции для 25% аккаунтов, в которых есть активность каждый день в пределах диапазона дат. Таким образом, если на 01.03.2018 было 100 учетных записей с записями в этой таблице, он хочет увидеть все транзакции для 25 из этих учетных записей; если на 02.03.2018 было 60 учетных записей с записями в этой таблице, он хочет увидеть все транзакции для 15 из этих учетных записей; и так далее.
Я думал, что модуль доступа будет работать лучше всего в этом сценарии, поскольку я считаю, что он состоит из нескольких частей. Я понял, что мне нужна функция для перебора диапазона дат и для каждого дня: 1. Подсчет номеров счетов только один раз 2. Возврат всех транзакций для 25% от общего числа счетов.
Но, как я уже говорил, я не программист, и я устал от поиска возможных решений для многих частей.