Выберите строки с уникальным значением в столбце, упорядоченные по метке времени? - PullRequest
1 голос
/ 04 июля 2019

Мне нужно выбрать 3 самых последних уникальных строки по RelationShipId (так что их дубликатов нет) с той, у которой метка времени ближе всего к выбранной сегодня.

У меня есть запрос, который выглядит сейчас, но он не работает.

Я получаю: недопустимо в списке выбора, поскольку оно не содержится ни в статистической функции, ни в предложении GROUP BY.

Сценарий, который у меня пока есть:

SELECT * FROM PlayerAction
WHERE [ActionType] = 'SomeString' AND [RelationShipType] = 'SomeString' AND [PlayerId] = 5 AND [Deleted] = 0
GROUP BY RelationShipId
ORDER BY [TimeStamp] DESC
OFFSET 1 ROWS
FETCH NEXT 3 ROWS ONLY

SampleData

{
 PlayerId=5
 ActionType="SomeString"
 RelationShipType="SomeString"
 RelationShipId=1
 TimeStamp=2019-07-04 07:45:47.400
 Deleted=0
}
{
 PlayerId=5
 ActionType="SomeString"
 RelationShipType="SomeString"
 RelationShipId=2
 TimeStamp=2019-07-03 14:29:10.530
 Deleted=0
}
{
 PlayerId=5
 ActionType="SomeString"
 RelationShipType="SomeString"
 RelationShipId=3
 TimeStamp=2019-07-03 13:56:26.057
 Deleted=0
}

представьте, что существует примерно 5 строк с одинаковым RelationShipId, бесконечным количеством RelationShipIds. Я хочу, чтобы первые 3 уникальные строки были выполнены TimeStamp. Три последних PlayerActions сделали

1 Ответ

2 голосов
/ 04 июля 2019

кажется вам нужен отчетливый и верхний

SELECT distinct top 3 * FROM PlayerAction
        WHERE [ActionType] = 'SomeString' AND [RelationShipType] = 'SomeString' AND [PlayerId] = SomeNumber AND [Deleted] = 0
       ORDER BY [TimeStamp] DESC
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...