@@ -86,11 +86,11 @@ ranked_payees AS (
8686 ) AS rnk
8787 FROM
8888 flat_transactions AS t
89- INNER JOIN budgets AS b ON t .budget_id = b .id
89+ INNER JOIN budgets AS b
90+ ON t .budget_id = b .id
9091 WHERE
9192 t .payee_name != ' Starting Balance'
9293 AND t .transfer_account_id IS NULL
93- AND NOT t .deleted
9494 GROUP BY
9595 b .id
9696 , t .payee_id
@@ -110,63 +110,68 @@ ORDER BY
110110;
111111```
112112
113- To get payees with no transactions:
113+ To get duplicate payees, or payees with no transactions:
114114
115115``` sql
116- WITH st AS (
117- SELECT
116+ WITH txns AS (
117+ SELECT DISTINCT
118118 budget_id
119119 , payee_id
120- , MAX (NOT deleted) AS has_active_transaction
121120 FROM
122- scheduled_flat_transactions
123- GROUP BY
121+ flat_transactions
122+
123+ UNION ALL
124+
125+ SELECT DISTINCT
124126 budget_id
125127 , payee_id
128+ FROM
129+ scheduled_flat_transactions
126130)
127131
128- , t AS (
132+ , p AS (
129133 SELECT
130134 budget_id
131- , payee_id
132- , MAX (NOT deleted) AS has_active_transaction
135+ , id
136+ , name
133137 FROM
134- flat_transactions
135- GROUP BY
136- budget_id
137- , payee_id
138+ payees
139+ WHERE
140+ NOT deleted
141+ AND name != ' Reconciliation Balance Adjustment '
138142)
139143
140144SELECT DISTINCT
141- b .name AS budget
142- , p .name AS payee
143- FROM
144- budgets AS b
145- INNER JOIN payees AS p ON b .id = p .budget_id
146- LEFT JOIN t
147- ON (
148- p .id = t .payee_id
149- AND p .budget_id = t .budget_id
150- )
151- LEFT JOIN st
152- ON (
153- p .id = st .payee_id
154- AND p .budget_id = st .budget_id
155- )
156- WHERE
157- NOT p .deleted
158- AND p .name != ' Reconciliation Balance Adjustment'
159- AND (
160- t .payee_id IS NULL
161- OR NOT t .has_active_transaction
162- )
163- AND (
164- st .payee_id IS NULL
165- OR NOT st .has_active_transaction
166- )
167- ORDER BY
168145 budget
169146 , payee
147+ FROM (
148+ SELECT
149+ b .name AS budget
150+ , p .name AS payee
151+ FROM
152+ p
153+ INNER JOIN budgets AS b
154+ ON p .budget_id = b .id
155+ LEFT JOIN txns AS t
156+ ON p .id = t .payee_id AND p .budget_id = t .budget_id
157+ WHERE
158+ t .payee_id IS NULL
159+
160+ UNION ALL
161+
162+ SELECT
163+ b .name AS budget
164+ , p .name AS payee
165+ FROM
166+ p
167+ INNER JOIN budgets AS b
168+ ON p .budget_id = b .id
169+ GROUP BY budget, payee
170+ HAVING
171+ COUNT (* ) > 1
172+
173+ )
174+ ORDER BY budget, payee
170175;
171176```
172177
@@ -182,17 +187,15 @@ FROM (
182187 , amount_major
183188 FROM flat_transactions
184189 WHERE
185- NOT deleted
186- AND category_name = ' Apps'
190+ category_name = ' Apps'
187191 AND SUBSTR(` date` , 1 , 7 ) = SUBSTR(DATE (), 1 , 7 )
188192 UNION ALL
189193 SELECT
190194 budget_id
191195 , amount_major
192196 FROM scheduled_flat_transactions
193197 WHERE
194- NOT deleted
195- AND category_name = ' Apps'
198+ category_name = ' Apps'
196199 AND SUBSTR(date_next, 1 , 7 ) < SUBSTR(DATE (' now' , ' +1 year' ), 1 , 7 )
197200)
198201;
0 commit comments