[英]SQL Find Last Entry Closest to a Date
我正在嘗試將壁櫥中的最后一個條目過濾到定義的日期,並且遇到了麻煩。 任何輸入,不勝感激。 謝謝! 我正在運行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
由於未指定DBMS,因此這是在SQL Server中執行此操作的一種簡便方法。 它在指定日期之前和之后獲取記錄:
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
大多數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
這應該做您想要的,並且應該很容易理解,不需要進一步說明:
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)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.