У меня есть таблица для статистического проекта.
Структура выглядит так:
CREATE TABLE NewStatHistory (
StatHistoryID uniqueidentifier PRIMARY KEY NOT NULL,
DateEntered dateTime NOT NULL,
DateApplies dateTime NOT NULL,
WhoEnteredID uniqueIdentifier NOT NULL,
PostingID uniqueIdentifier NULL,
EnteredValue decimal(19,5) NOT NULL,
StatID uniqueIdentifier NOT NULL,
StatStatus int NOT NULL,
Notes varchar(500) NULL,
CampusID uniqueidentifier NOT NULL,
IsTarget bit NOT NULL DEFAULT 0
)
Мне нужно получить последнее введенное значение для каждого «DateApplies».
Этот запрос почти мгновенно выполняется в SqlServer, но в SQLite он просто истекает, и я не могу понять, как оптимизировать его, чтобы он заработал.
SELECT NewStatHistory.*
FROM NewStatHistory
INNER JOIN (
SELECT MAX(DateEntered) entered, statID, DateApplies
FROM NewStatHistory
WHERE StatID = @statID
AND campusID = @campusID
AND IsTarget = 0
GROUP BY DateApplies, statID
) summary
ON summary.entered = newstathistory.dateEntered AND
summary.statID = newStatHistory.statID AND
summary.DateApplies = newStatHistory.DateApplies
WHERE NewStatHistory.StatID = @statID AND
IsTarget = 0 AND
campusID = @campusID
ORDER BY NewStatHistory.DateApplies DESC
У кого-нибудь есть идеи о том, как заставить его работать. В противном случае мне нужно будет найти другую встроенную базу данных для использования. Кроме этого запроса, SQLite выполнил все, о чем я его просил.
Что касается индексов, на SqlServer у меня индексирован только первичный ключ. На SQLite я попытался использовать только первичный ключ, но затем добавил несколько других столбцов, но безрезультатно.
Подзапрос также быстро выполняется на SQLite, так что, похоже, именно соединение вызывает медленную работу.