aboutsummaryrefslogtreecommitdiff
path: root/src/db/20251117-0-summary-view.sql
diff options
context:
space:
mode:
authorKevin Hoerr <kjhoerr@submelon.dev>2026-04-16 11:37:21 -0400
committerKevin Hoerr <kjhoerr@submelon.dev>2026-04-16 11:37:21 -0400
commit615d44041d35ee1a08ddc66423f67a9d48f53ae9 (patch)
tree9720d6a192e0bae9c7393b8b99ff8ae401ec7f72 /src/db/20251117-0-summary-view.sql
parent51623bc995c29937bb0a13d5b71ff908be8d1a1c (diff)
downloadequity-tracker-615d44041d35ee1a08ddc66423f67a9d48f53ae9.tar.gz
equity-tracker-615d44041d35ee1a08ddc66423f67a9d48f53ae9.tar.bz2
equity-tracker-615d44041d35ee1a08ddc66423f67a9d48f53ae9.zip
Switch to distrobox as base for development
Diffstat (limited to 'src/db/20251117-0-summary-view.sql')
-rw-r--r--src/db/20251117-0-summary-view.sql65
1 files changed, 65 insertions, 0 deletions
diff --git a/src/db/20251117-0-summary-view.sql b/src/db/20251117-0-summary-view.sql
new file mode 100644
index 0000000..a4e8004
--- /dev/null
+++ b/src/db/20251117-0-summary-view.sql
@@ -0,0 +1,65 @@
+-- Yucky slow view, since it's sub-querying for each of the summation fields
+-- AND has a subquery on the inner join to find the right symbols. Anyways it
+-- should preview relative strength of treating equity transaction data as
+-- immutable. Any application on top of this should get the full list of
+-- records so it can construct helpful views of summations based on the history
+-- of changes, and/or show price data over time
+CREATE VIEW account_symbol_summary_view
+AS
+SELECT
+ acc.fiduciary_account_id,
+ acc.fiduciary_account_name,
+ acc.fiduciary_account_description,
+ acc.fiduciary_account_number,
+ acc.fiduciary_account_created_timestamp,
+ sym.equity_symbol_id,
+ sym.equity_symbol_type,
+ sym.equity_symbol_name,
+ sym.equity_symbol_managing_company,
+ (SELECT
+ SUM(ev.equity_change_quantity * ev.equity_change_type_score)
+ FROM equity_change_event ev
+ WHERE ev.fiduciary_account_id = acc.fiduciary_account_id
+ AND ev.equity_symbol_id = sym.equity_symbol_id
+ ) AS account_symbol_quantity,
+ (SELECT
+ printf( '%.2f', SUM(ev.equity_change_cost_basis_usd * ev.equity_change_type_score) / SUM(ev.equity_change_quantity * ev.equity_change_type_score))
+ FROM equity_change_event ev
+ WHERE ev.fiduciary_account_id = acc.fiduciary_account_id
+ AND ev.equity_symbol_id = sym.equity_symbol_id
+ ) AS account_symbol_cost_basis_price,
+ (SELECT
+ printf( '%.2f', SUM(ev.equity_change_cost_basis_usd * ev.equity_change_type_score))
+ FROM equity_change_event ev
+ WHERE ev.fiduciary_account_id = acc.fiduciary_account_id
+ AND ev.equity_symbol_id = sym.equity_symbol_id
+ ) AS account_symbol_cost_basis_total_usd,
+ (SELECT
+ printf( '%.2f', SUM(ev.equity_change_quantity) * (
+ SELECT
+ iev.equity_change_est_price
+ FROM equity_change_event iev
+ WHERE iev.fiduciary_account_id = acc.fiduciary_account_id
+ AND iev.equity_symbol_id = sym.equity_symbol_id
+ ORDER BY iev.equity_change_timestamp DESC
+ LIMIT 1
+ ))
+ FROM equity_change_event ev
+ WHERE ev.fiduciary_account_id = acc.fiduciary_account_id
+ AND ev.equity_symbol_id = sym.equity_symbol_id
+ ) AS account_symbol_last_effective_price,
+ (SELECT
+ ev.equity_change_timestamp
+ FROM equity_change_event ev
+ WHERE ev.fiduciary_account_id = acc.fiduciary_account_id
+ AND ev.equity_symbol_id = sym.equity_symbol_id
+ ORDER BY ev.equity_change_timestamp DESC
+ LIMIT 1
+ ) AS account_symbol_last_update_timestamp
+FROM fiduciary_account acc
+INNER JOIN equity_symbol sym ON EXISTS(
+ SELECT *
+ FROM equity_change_event e
+ WHERE e.fiduciary_account_id = acc.fiduciary_account_id
+ AND e.equity_symbol_id = sym.equity_symbol_id
+); \ No newline at end of file