如何查询SQL以获取具有附加条件的最新记录

时间:2014-09-23 15:20:20

标签: sql greatest-n-per-group

我应该在特定日期(2014-10-01)找到所有有效的vm_id,重要的是我应该只达到每个vm_id的最新记录。

  

date,action,vm_id,vm_status
2014-09-01   08:13:00,Creation,vm-4058,active 2014-09-04   10:13:00,Creation,vm-4059,active
2014-09-08   17:13:00,删除,vm-4059,取消
2014-09-30   09:13:00,Creation,vm-4057,活跃
2014-09-30   15:13:00,修改,vm-4057,活动
2014-10-23   08:13:00,删除,VM-4057,取消

我想在2014-10-01获取所有有效订阅的最新记录:

  

2014-09-01 08:13:00,Creation,vm-4058,active
2014-09-30   15:13:00,改性,VM-4057,活性

有谁知道如何到达那里?

3 个答案:

答案 0 :(得分:0)

- 试试这个

选择Max(date)作为日期,max(action)作为action,vm_id,Max(vm_status)来自[tablename]

其中vm_status ='有效'和vm_id不在(从[tablename]中选择vm_id,其中vm_status ='取消')

按vn_id分组

答案 1 :(得分:0)

这是个主意。找到最新日期,然后找到记录并确定它是否有效。

select t.*
from table t join
     (select vm_id, max(date) as maxdate
      from table t
      group by vm_id
     ) tt
     on t.vm_id = tt.vm_id and t.date = tt.maxdate
where t.status = 'active';

答案 2 :(得分:0)

我的两分钱,在你约会之前得到最新最好的,并确保它不是删除。和其他一些答案一样,只是另一种方法。

中选择日期,操作,vm_id,vm_status
(SELECT  *,
        ROW_NUMBER() OVER
        (
                PARTITION BY  A.vm_id
                ORDER BY      A.date DESC
        ) AS seq
FROM tablename where date < '2014/10/01') b
where seq = 1 and vm_status <> 'Deletion'
相关问题