import psycopg2 conn = psycopg2.connect( host="192.168.0.61", port=55432, database="njts_acct", user="njts_app", password="njts_app2025" ) cur = conn.cursor() print("=" * 120) print("【分析】通过复制创建的重复数据识别") print("=" * 120) # 查询所有"遠達ビル 事務所費用"的记录,按月份分组 cur.execute(""" SELECT EXTRACT(YEAR FROM je.entry_date)::int as year, EXTRACT(MONTH FROM je.entry_date)::int as month, COUNT(*) as cnt, STRING_AGG(je.journal_entry_id::text, ', ' ORDER BY je.journal_entry_id) as ids FROM journal_entries je WHERE je.description LIKE '%遠達ビル 事務所費用%' AND je.is_deleted = false GROUP BY year, month ORDER BY year, month """) results = cur.fetchall() print("\n【遠達ビル 事務所費用】6月~8月の件数(未削除)") for year, month, cnt, ids in results: print(f" {year}年{month}月: {cnt}件(IDs: {ids})") # 现在查询每个月份最多的金额组合(这应该是预期的、正确的记录) print("\n【分析】6月~8月各月の仕訳明細") for month in [6, 7, 8]: print(f"\n--- {month}月 ---") cur.execute(""" SELECT je.journal_entry_id, je.description, je.is_latest, je.is_deleted, COALESCE(SUM(jl.debit), 0) as debit_total, COALESCE(SUM(jl.credit), 0) as credit_total FROM journal_entries je LEFT JOIN journal_lines jl ON je.journal_entry_id = jl.journal_entry_id WHERE EXTRACT(MONTH FROM je.entry_date) = %s AND EXTRACT(YEAR FROM je.entry_date) = 2025 AND je.description LIKE '%%遠達ビル 事務所費用%%' AND je.is_deleted = false GROUP BY je.journal_entry_id, je.description, je.is_latest, je.is_deleted ORDER BY je.journal_entry_id """, (month,)) month_results = cur.fetchall() if month_results: for row in month_results: entry_id, description, is_latest, is_deleted, debit, credit = row latest_mark = "✓" if is_latest else "✗" print(f" ID={entry_id} [{latest_mark}] | 借={debit:>10,.0f} 貸={credit:>10,.0f} | {description}") else: print(" 該当データなし") print("\n" + "=" * 120) print("【推奨】删除对象") print("=" * 120) print("遠達ビル 事務所費用の重复数据:") print(" - 原则上,每月应该只有1笔合法的仕訳") print(" - 如果某月有多笔,除了最新的(is_latest=true)外,其他都应该删除") print(" - 或者由用户确认哪些是通过复制创建的不需要的数据") cur.close() conn.close()