Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在SQL中查询具有附加条件的最新记录_Sql_Greatest N Per Group - Fatal编程技术网

如何在SQL中查询具有附加条件的最新记录

如何在SQL中查询具有附加条件的最新记录,sql,greatest-n-per-group,Sql,Greatest N Per Group,我应该找到某个日期2014-10-01的所有活动vm_id,重要的是,我应该只找到每个vm_id的最新记录 日期、行动、虚拟机id、虚拟机状态2014-09-01 08:13:00,创建,vm-4058,活动2014-09-04 10:13:00,创建,vm-4059,活动2014-09-08 17:13:00,删除,vm-4059,取消2014-09-30 09:13:00,创建,vm-4057,活动2014-09-30 15:13:00,修改,vm-4057,激活2014-10-23 08:

我应该找到某个日期2014-10-01的所有活动vm_id,重要的是,我应该只找到每个vm_id的最新记录

日期、行动、虚拟机id、虚拟机状态2014-09-01 08:13:00,创建,vm-4058,活动2014-09-04 10:13:00,创建,vm-4059,活动2014-09-08 17:13:00,删除,vm-4059,取消2014-09-30 09:13:00,创建,vm-4057,活动2014-09-30 15:13:00,修改,vm-4057,激活2014-10-23 08:13:00,删除,vm-4057,取消

我想获取2014年10月1日所有活动订阅的最新记录:

2014-09-01 08:13:00,创建,vm-4058,活动2014-09-30 15:13:00,修改,vm-4057,激活

有人知道怎么去吗?

-试试这个

从[tablename]中选择Maxdate作为日期、maxactionas操作、vm_id、Maxvm_状态

其中vm_status='active'和vm_id不在[tablename]中选择vm_id,其中vm_status='cancelled'


按vn_id分组这是一个想法。查找最新日期,然后查找记录并确定其是否处于活动状态

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';

我的两分钱,在约会之前获取最新和最棒的,并确保它不是删除。与其他答案的想法相同,只是另一种方法

从中选择日期、操作、虚拟机id、虚拟机状态

(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'

这非常接近,但它也显示了vm-4059,该vm-4059在“2014/10/01”之前被取消,因此不再处于活动状态,不应显示。这里也非常接近,但它只返回了vm-4058,而不是在“2014/10/01”之后删除的vm-4059,因此应该返回。好,在这里,我甚至可以添加所需的部分:选择Maxdate作为日期,maxactionas操作,vm_id,Maxvm_status from t,其中vm_status='active'和vm_id not in,选择vm_id from t,其中vm_status='cancelled'和date<'2014/10/01'按vm_id分组,就是这样!谢谢你!你可以去这篇文章,对同样的问题做更多的解释。