我有一个 tblMachineReports 列:Status(varchar)、LogDate(datetime)、Category(varchar) 和 MachineID(int)。
我想从每台机器的每个类别中检索最新的状态更新,因此实际上是获取其 MachineID 唯一的所有机器的最新状态的快照。
表数据看起来像
类别 - 状态 - MachineID - LogDate
cata - status1 - 001 - date1
cata - status2 - 002 - date2 catb
- status3 - 001 - date2
catc - status2 - 002 - date4
cata - status3 - 001 - date5
catc - status1 - 001 - date6
catb - status2 - 001 - date7
cata - status2 - 002 - date8 catb
- status2 - 002 - date9
catc - status2 - 001 - date10
重述,我有多台机器在此 tblMachineReports 中报告多个状态。所有行都是通过插入创建的,因此随着新状态的进入,它们显然是机器的重复条目。无法预测任何列,所以我不能在任何部分进行任何 ='some hard coded string' 比较选择语句。
对于我提供的示例表,所需的结果如下所示:
类别 - 状态 - MachineID - LogDate
catc - status2 - 002 - date4
cata - status3 - 001 - date5 catb
- status2 - 001 - date7
cata - status2 - 002 - date8
catb - status2 - 002 - date9
catc - status2 - 001 - date10
使用 MS SQL Server 2008 来实现这一点,获取每台机器上每个类别的最新状态的 select 语句会是什么样子?我已经尝试了不同的子查询组合与聚合 MAX(LogDates) 的组合,以及连接、分组依据、不同点和其他什么,但还没有找到一个可行的解决方案。