如何选择所有项目及其最新值

时间:2015-05-28 22:36:03

标签: sql sql-server tsql

我有这种表架构

DateTime | Item | Value | Active
--------------------------------
date1      i1     23       1
date2      i1     25       0
date3      i1     25      -1

仅执行插入,“活动”列表示:1已创建,-1已删除,0值已更改。关键是让所有项目在特定日期仍处于活动状态,并且使用group by(Item) having sum(active)>1很容易,但我想要的是获取活动项目的最新值。

因此,在这个例子中它将是:

  • 对于以date1结尾的时间间隔,该值应为23
  • 对于以date2结尾的时间间隔,该值应为25
  • 对于以date3结尾的时间间隔,应该没有结果

我的Sql不是很强大所以我需要一些帮助来查询(或者可能采用不同的存储/处理方法)获取所有活动项及其相对于给定开始/结束日期的更新值

1 个答案:

答案 0 :(得分:0)

您可以使用outer apply

在SQL Server中表达这一点
select t.*
from table t outer apply
     (select top 1 t2.*
      from table t2
      where t2.datetime > t.datetime
      order by t2.datetime asc
     ) tnext
where @date >= t.datetime and
      (t.datetime < tnext.datetime or tnext.datettime is null) and
      t.status <> -1;