在sql server上获取最近的过去日期记录
我有以下表格:在sql server上获取最近的过去日期记录,sql,sql-server,tsql,Sql,Sql Server,Tsql,我有以下表格: id dr cr balance txn_date 1 0.00 0.00 31895532.96 12/20/2013 2 15000.00 0.00 31880532.96 12/20/2013 3 102120.00 0.00 31778412.96 12/20/2013 4 15250.00 0.00 31763162.96 12/20/2013 5 75000
id dr cr balance txn_date
1 0.00 0.00 31895532.96 12/20/2013
2 15000.00 0.00 31880532.96 12/20/2013
3 102120.00 0.00 31778412.96 12/20/2013
4 15250.00 0.00 31763162.96 12/20/2013
5 75000.00 0.00 25761370.96 12/22/2013
6 98600.00 0.00 25662770.96 12/22/2013
7 71460.00 0.00 25591310.96 12/22/2013
8 518400.00 0.00 25072910.96 12/22/2013
9 35000.00 0.00 25037910.96 12/22/2013
输入日期时,我需要找到期初余额。例如,当输入12/20/2013
时,期初余额为31895532.96
没有必要每天进行交易。我们在2013年12月21日也没有交易,在这种情况下,我们需要在2013年12月20日的最后一笔交易中取得余额,即31763162.96
。有什么办法可以实施吗
2013年12月20日,我做了以下工作:
select top 1 balance
from banks
where txn_date = '12/20/2013' order by id
现在,当我谈到2013年12月21日时,该日期没有交易。因此,前一日期的最后一笔交易(不一定是昨天,它可以是任何日期,取决于交易日期)应为余额,即31763162.96
:
select top 1 balance
from banks
where txn_date <= '12/21/2013' order by id desc
选择前1名余额
来自银行
其中txn_date您没有提供任何关于为什么31895532.96
应作为12/20/2013
输入的输出的信息。在您的示例中,有多条记录具有相同的txn\u日期
值。
在下面的查询中,我在满足txn\u date
条件的记录中选择一个任意值
SELECT TOP 1 balance
FROM banks
WHERE txn_date = @argumentDate
在本例中,@argumentDate
是用于比较的任何日期(12/20/2013
)
编辑:
假设您的txn\u date
列是DateTime列,而不仅仅是可以使用的字符串:
SELECT TOP 1 balance
FROM banks
WHERE DATEDIFF(DAY , txn_date , @argumentDate ) <=0
ORDER BY DATEDIFF(DAY , txn_date , @argumentDate ) DESC
选择前1名余额
来自银行
其中DATEDIFF(DAY,txn_date,@argumentDate)使用CTE可以得到逻辑
with cte (DR,CR,Balance,TxnDate,RowID ) as
(
select DR,CR,Balance,TxnDate,Row_number() over (PARTITION by txndate order by txndate desc) as RowID
from Trans
)
select top 1 Balance
from cte
where TxnDate = case when @TXNDATE = '12/20/2013' then (select top 1 TxnDate from Cte where @TXNDATE = '12/20/2013')
when @TXNDATE > '12/20/2013' then (select top 1 TxnDate from Cte where TXNDATE='12/20/2013' ) end
ORDER BY
case when @TXNDATE = '12/20/2013' then RowID end ASC,
case when @TXNDATE > '12/20/2013' then RowID end Desc
为什么你迷路了我不明白你在维护哪一个?你是在说sum(dr)=balance吗?没有“balance”列那么上次更新和当前的关系是什么?如果你只是按照你的帖子存储日期,那么就可能用你迄今为止尝试过的SQL查询来显示你的努力,当某个特定日期重复时,你将无法找到期初余额,你实际上需要在同一个日期列中存储时间,只有这样你才能使用order by子句对结果进行排序请解释为什么你的示例不适用于你。你得到了什么?你希望得到什么?。当有交易发生时,它将返回余额@argumentDate@timus2001我已根据您的编辑编辑了答案