Permintaan Microsoft Access untuk mengambil transaksi acak dengan kriteria yang tampaknya mustahil

Saya diminta membantu mengembangkan laporan untuk mengambil 25% sampel transaksi acak dalam rentang tanggal tertentu. Saya bukan seorang programmer tetapi saya dapat merancang yang berikut ini dengan cukup cepat:

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

Ini mengembalikan 25% catatan dalam rentang tanggal. Setiap baris catatan bersifat unik tetapi setiap nomor akun berpotensi memiliki beberapa catatan setiap harinya. Dalam beberapa kasus, catatan memiliki tanggal dan tran_id yang sama juga.

Setelah berdiskusi lebih lanjut dengan pemohon, dia sebenarnya ingin melihat semua transaksi 25% akun yang memiliki aktivitas setiap hari dalam rentang tanggal. Jadi jika ada 100 akun pada 1/3/2018 dengan catatan di tabel ini, dia ingin melihat semua transaksi untuk 25 akun tersebut; jika ada 60 akun pada 2/3/2018 dengan catatan di tabel ini, dia ingin melihat semua transaksi untuk 15 akun tersebut; dan seterusnya.

Saya berpikir bahwa modul Access akan bekerja paling baik dalam skenario ini karena saya yakin ada banyak bagian di dalamnya. Saya pikir saya memerlukan fungsi untuk menelusuri rentang tanggal dan untuk setiap hari: 1. Hitung nomor rekening hanya satu kali 2. Kembalikan semua transaksi sebesar 25% dari total akun

Tapi seperti yang saya sebutkan, saya bukan seorang programmer dan saya lelah mencari solusi yang mungkin untuk banyak bagian.


person S. H.    schedule 20.06.2018    source sumber
comment
Cara mengajukan pertanyaan SQL yang baik. Contoh data dan hasil yang diharapkan jauh lebih berguna daripada deskripsi tekstual.   -  person Andre    schedule 21.06.2018


Jawaban (1)


Saya pikir kunci dari pertanyaan Anda adalah Anda hanya benar-benar memerlukan pilihan hasil acak semu untuk laporan Anda. Jadi Anda dapat memaksa pembuat angka acak untuk menyusun ulang hasil Anda berdasarkan nilai dalam catatan dan waktu saat ini.

Sesuatu seperti ini seharusnya berfungsi - Saya berasumsi bidang actiontxt Anda adalah bidang teks dan menarik panjang setiap bidang dan menerapkannya pada tanggal/waktu saat ini untuk membuat nomor acak semu yang dapat diurutkan.

Yang sebenarnya saya lakukan hanyalah mengubah baris ORDER BY Anda

Lihat apakah ini berhasil untuk Anda

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 Rnd(CLng(Now()*Len(log.action_txt))-(Now()*Len(log.action_txt)));

Memodifikasi ide serupa dari pertanyaan dan respons StackOverflow lainnya

person dbmitch    schedule 21.06.2018