替换加入只留下一个 'Table Scan'

Substitute join to leave only one 'Table Scan'

我有财务数据。并想计算股东权益。这基本上是这样的:

我有以下有效的查询:

SELECT a.Ticker, a.Value - l.Value as 'ShareholdersEquity'
FROM FinData a 
JOIN FinData l 
ON a.Ticker = l.Ticker AND a.Date = l.Date 
WHERE a.Type = 'assets' 
AND l.Type = 'liabilities'

但是对于有很多记录的 table 来说,这会很慢,因为当我使用 Explain 检查查询时(我使用 Azure Data Studio)并且它进行了 2 table 扫描,这意味着更多的时间.我如何重写它才能更快?

您可以尝试条件聚合而不是自连接:

select ticker, date, 
    sum(case when type = 'asset' then value else - value end) as ShareholdersEquity
from findata
where type in ('asset', 'liabilities')
group by ticker, date