簡體   English   中英

SQL查找最接近日期的最后一個條目

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM