我正在尝试将表格壁橱中的最后一个条目过滤到定义的日期,我遇到了困难。任何输入都非常感谢。谢谢!我正在运行Microsoft SQL Server 2008。
表:
code | account | date | amount
1 | 1234 | 2016-02-28 | 500
2 | 1234 | 2016-03-01 | 650
3 | 1234 | 2016-03-05 | 842
4 | 7890 | 2016-02-28 | 500
5 | 7890 | 2016-03-30 | 550
我想只选择日期最接近3月31日的条目(' 2016-03-31')。在此示例中,帐户1234最接近2016-03-31的条目是条目#3,而帐户7890最接近2016-03-31的条目是条目#5。换句话说,我希望所有帐户的最后一个条目等于或等于日期。
3 | 1234 | 2016-03-05 | 842
5 | 7890 | 2016-03-30 | 550
答案 0 :(得分:1)
由于没有指定DBMS,这里有一种在SQL Server中执行此操作的hacky方法。它在指定日期之前和之后抓取记录:
select * from (
select top(1) * FROM mytable
where date >= '2016-03-31' order by date asc
) t1
union
select * from (
select top(1) * FROM mytable
where date <= '2016-03-31' order by date desc
) t2
答案 1 :(得分:1)
大多数DBMS(包括MS SQL Server)都支持分析函数:
select *
from
(
select *,
row_number() -- create a ranking
over (partition by account -- for each account
order by date desc) as rn -- based on descending dates
from tab
where date <= date '2016-03-31'
) dt
where rn = 1 -- return the row with the "closest" date
答案 2 :(得分:0)
这应该做你想要的,并且应该很容易理解,不需要进一步解释:
select t.*
from your_table t
join (
select account, max(date) as date
from your_table
where date <= '2016-03-31'
group by account
) as subquery on t.account = subquery.account and t.date = subquery.date
编辑:对于SQL Server,最好使用分析函数(如row_number)