Я попробовал приведенный ниже код в SQL Server.Оно работает.Преимущество подхода, представленного ниже, состоит в том, что он позволяет избежать использования функций в предложении WHERE, что приводит к возможным запросам.Если столбец Date имеет правильный индекс, приведенный ниже запрос даст хорошую производительность.
CREATE TABLE #rankings(symbol CHAR(10), [date] DATETIME, RANKING INT);
INSERT INTO #rankings VALUES ('MSFT','20190922', 1), ('MSFT','20190923',2), ('AMZN', '20190922', 3), ('AMZN','20190923',3);
DECLARE @todayStart DATETIME = CAST(GETDATE() AS DATE)
DECLARE @yesterDayStart DATETIME = DATEADD(DAY,-1,@todaystart)
SELECT @todayStart, @yesterDayStart
SELECT today.symbol, yesterday.ranking, today.ranking
FROM (SELECT * FROM #Rankings AS today WHERE today.date >= @todayStart) AS today
JOIN (SELECT * FROM #Rankings AS yesterday WHERE yesterday.date >= @yesterdayStart AND yesterday.date < @todayStart) AS yesterday
ON today.symbol = yesterday.symbol
WHERE today.ranking <> yesterday.ranking