У меня есть tblMachineReports со столбцами: Status (varchar), LogDate (datetime), Category (varchar) и MachineID (int).
Я хочу получить последнее обновление статуса из каждой категории для каждой машины, чтобы получить снимок последних статусов всех машин, уникальных для их MachineID.
Данные таблицы будут выглядеть как
Категория - Статус - MachineID - LogDate
ката - статус1 - 001 - дата1
ката - статус2 - 002 - дата2
catb - status3 - 001 - date2
catc - status2 - 002 - date4
ката - статус3 - 001 - дата5
catc - status1 - 001 - date6
catb - status2 - 001 - date7
ката - статус2 - 002 - дата8
catb - status2 - 002 - date9
catc - status2 - 001 - date10
Вкратце, у меня есть несколько компьютеров, сообщающих о нескольких статусах в этом tblMachineReports. Все строки создаются с помощью вставок, поэтому, по мере появления новых статусов, они, очевидно, будут дублирующими записями для машин. Ни один из столбцов не может быть предсказан, поэтому я не могу делать сравнения = некоторые жестко закодированные строки в любой части оператор выбора.
Для предоставленной мною таблицы желаемые результаты будут выглядеть следующим образом:
Категория - Статус - MachineID - LogDate
catc - status2 - 002 - date4
ката - статус3 - 001 - дата5
catb - status2 - 001 - date7
ката - статус2 - 002 - дата8
catb - status2 - 002 - date9
catc - status2 - 001 - date10
Как бы выглядел оператор select для достижения этой цели, получая последний статус для каждой категории на каждом компьютере с использованием MS SQL Server 2008? Я пробовал разные комбинации подзапросов в сочетании с совокупными значениями MAX (LogDates), а также с объединениями, группировкой, различиями и чем-то еще, но пока не нашел работающего решения.