feat: add 11 new saved queries, fix window quoting and cross-table join in samples

This commit is contained in:
Celes Renata
2026-04-16 07:14:44 +00:00
parent f1e32e9186
commit 0b3ab4ed90
+34 -1
View File
@@ -44,5 +44,38 @@ INSERT INTO saved_queries (name, description, sql_text) VALUES
'SELECT c.ticker, c.legal_name, count(*) FILTER (WHERE s.source_type = ''market_api'') AS market, count(*) FILTER (WHERE s.source_type = ''news_api'') AS news, count(*) FILTER (WHERE s.source_type = ''filings_api'') AS filings, count(*) AS total FROM companies c LEFT JOIN sources s ON c.id = s.company_id AND s.active = TRUE WHERE c.active = TRUE GROUP BY c.ticker, c.legal_name ORDER BY c.ticker'), 'SELECT c.ticker, c.legal_name, count(*) FILTER (WHERE s.source_type = ''market_api'') AS market, count(*) FILTER (WHERE s.source_type = ''news_api'') AS news, count(*) FILTER (WHERE s.source_type = ''filings_api'') AS filings, count(*) AS total FROM companies c LEFT JOIN sources s ON c.id = s.company_id AND s.active = TRUE WHERE c.active = TRUE GROUP BY c.ticker, c.legal_name ORDER BY c.ticker'),
('Top Movers', 'Biggest price change vs previous day open', ('Top Movers', 'Biggest price change vs previous day open',
'SELECT DISTINCT ON (ticker) ticker, (data->>''c'')::numeric AS close, (data->>''o'')::numeric AS open, round(((data->>''c'')::numeric - (data->>''o'')::numeric) / NULLIF((data->>''o'')::numeric, 0) * 100, 2) AS change_pct FROM market_snapshots WHERE snapshot_type = ''bar'' AND (data->>''o'')::float > 0 ORDER BY ticker, captured_at DESC') 'SELECT DISTINCT ON (ticker) ticker, (data->>''c'')::numeric AS close, (data->>''o'')::numeric AS open, round(((data->>''c'')::numeric - (data->>''o'')::numeric) / NULLIF((data->>''o'')::numeric, 0) * 100, 2) AS change_pct FROM market_snapshots WHERE snapshot_type = ''bar'' AND (data->>''o'')::float > 0 ORDER BY ticker, captured_at DESC'),
('Companies with Close Price', 'All tracked companies with latest close price',
'SELECT c.ticker, c.legal_name, c.sector, (ms.data->>''c'')::float AS close_price FROM companies c LEFT JOIN LATERAL (SELECT data FROM market_snapshots WHERE ticker = c.ticker AND snapshot_type = ''bar'' ORDER BY captured_at DESC LIMIT 1) ms ON true WHERE c.active = TRUE ORDER BY c.sector, c.ticker'),
('Buy Signals by Tier', 'Buy recommendations grouped by confidence tier',
'SELECT CASE WHEN confidence >= 0.90 THEN ''Very High (90%+)'' WHEN confidence >= 0.75 THEN ''High (75-90%)'' WHEN confidence >= 0.55 THEN ''Moderate (55-75%)'' ELSE ''Low (<55%)'' END AS tier, count(*) AS count, round(avg(confidence)::numeric, 3) AS avg_confidence FROM recommendations WHERE action = ''buy'' GROUP BY 1 ORDER BY avg_confidence DESC'),
('Most Recommended Tickers', 'Top tickers by buy signal count (confidence >= 0.75)',
'SELECT ticker, count(*) AS buy_signals, round(avg(confidence)::numeric, 3) AS avg_confidence, max(generated_at) AS latest FROM recommendations WHERE action = ''buy'' AND confidence >= 0.75 GROUP BY ticker ORDER BY buy_signals DESC LIMIT 20'),
('Strongest Bullish Trends', 'Strongest bullish trends right now',
'SELECT entity_id AS ticker, "window", trend_direction, round(trend_strength::numeric, 4) AS strength, round(confidence::numeric, 4) AS confidence FROM trend_windows WHERE trend_direction = ''bullish'' ORDER BY trend_strength DESC LIMIT 20'),
('Bearish Signals', 'Bearish signals to watch (strength > 0.5)',
'SELECT entity_id AS ticker, "window", trend_direction, round(trend_strength::numeric, 4) AS strength FROM trend_windows WHERE trend_direction = ''bearish'' AND trend_strength > 0.5 ORDER BY trend_strength DESC LIMIT 20'),
('High Severity Events', 'High and critical severity macro events',
'SELECT severity, LEFT(summary, 120) AS summary, affected_sectors, created_at FROM global_events WHERE severity IN (''high'', ''critical'') ORDER BY created_at DESC LIMIT 20'),
('Skip Reason Breakdown', 'Trading decision skip reasons',
'SELECT skip_reason, count(*) AS count FROM trading_decisions WHERE decision = ''skip'' GROUP BY skip_reason ORDER BY count DESC'),
('Act Decisions', 'Trades the engine wanted to make',
'SELECT ticker, computed_position_size, computed_share_quantity, risk_tier_at_decision, created_at FROM trading_decisions WHERE decision = ''act'' ORDER BY created_at DESC LIMIT 20'),
('Documents Today', 'Documents processed today by type and status',
'SELECT document_type, status, count(*) FROM documents WHERE created_at > CURRENT_DATE GROUP BY document_type, status ORDER BY document_type, count(*) DESC'),
('Ingestion Failures 6h', 'Ingestion failures in the last 6 hours',
'SELECT s.source_type, s.source_name, ir.status, LEFT(ir.error_message, 80) AS error, ir.started_at FROM ingestion_runs ir JOIN sources s ON ir.source_id = s.id WHERE ir.status = ''failed'' AND ir.started_at > NOW() - INTERVAL ''6 hours'' ORDER BY ir.started_at DESC LIMIT 20'),
('Intelligence Coverage', 'Companies with the most documents and recommendations',
'SELECT c.ticker, c.sector, count(DISTINCT d.id) AS documents, count(DISTINCT r.id) AS recommendations FROM companies c LEFT JOIN document_company_mentions dcm ON dcm.company_id = c.id LEFT JOIN documents d ON d.id = dcm.document_id AND d.source_type IN (''news_api'', ''filings_api'') LEFT JOIN recommendations r ON r.ticker = c.ticker WHERE c.active = TRUE GROUP BY c.ticker, c.sector ORDER BY documents DESC LIMIT 20')
ON CONFLICT (name) DO UPDATE SET sql_text = EXCLUDED.sql_text, description = EXCLUDED.description; ON CONFLICT (name) DO UPDATE SET sql_text = EXCLUDED.sql_text, description = EXCLUDED.description;