У меня есть набор данных, показанный ниже. Из этого я хочу выбрать первую строку из каждой группы, где статус PersonIDs был изменен на другой статус, чем предыдущий.Как сгруппировать эти данные без использования функции LAG
Например, из этого набора данных мне нужны строки 1, 4, 7 и 11. Любая помощь по этому вопросу? Если я делаю GROUPBY, он просто объединяет все новые и все ожидающие в 2 группы. У меня только SQL Server 2008, поэтому функция задержки не будет работать.
PersonID Status WhenChanged
101 New 27/01/2017 15:27
101 New 27/01/2017 16:40
101 New 27/01/2017 16:40
101 Pending 27/01/2017 16:40
101 Pending 27/01/2017 16:40
101 Pending 27/01/2017 16:40
101 New 31/01/2017 09:14
101 New 31/01/2017 10:02
101 New 31/01/2017 10:03
101 New 31/01/2017 10:05
101 Pending 03/02/2017 14:29
101 Pending 03/02/2017 14:29
Действительно ли ваш «WhenChanged» имеет значение «VARCHAR» ...? – Siyual
С вашей структурой это невозможно. Ваши значения datetime (которые выглядят подозрительно, как «VARCHAR») * не уникальны. Вам нечего сортировать. И без каких-либо приказов этих результатов нет гарантированного порядка ваших результатов. Таким образом, невозможно получить желаемые результаты. Вам нужен уникальный идентификатор для записей. – Siyual