我試圖從上一個生效日期開始獲得一個連續的日期和連續的投資現金。我需要在 2021 年第三季度提取這個,但在 7 月 1 日沒有公布投資現金價值,所以我需要回到下一個最早出現投資現金的日期。
該表從 21 年 6 月 30 日到 21 年 9 月 30 日回傳。僅當現金實際過帳到帳戶時才會顯示值。
| 會計 | 投資現金 | 生效日期 |
|---|---|---|
| 123 | 1315.73 | 2021-06-30 |
| 123 | 1315.74 | 2021-07-30 |
| 123 | 1340.74 | 2021-08-30 |
| 123 | 1340.75 | 2021-08-31 |
| 123 | 1349.00 | 2021-09-13 |
| 123 | 1349.84 | 2021-09-29 |
| 123 | 1349.85 | 2021-09-30 |
我需要這樣的資料來計算平均每日余額。請注意,在 7/30 之前,它每天都必須是相同的值,然后重復該模式,直到 8/30 的下一個投資現金值,依此類推。
| 會計 | 投資現金 | 生效日期 |
|---|---|---|
| 123 | 1315.73 | 2021 年 6 月 30 日 |
| 123 | 1315.73 | 2021 年 7 月 1 日 |
| 123 | 1315.73 | 2021 年 7 月 2 日 |
| 123 | 1315.73 | 2021 年 7 月 3 日 |
| 123 | 1315.73 | 2021 年 7 月 4 日 |
| 123 | 1315.73 | 2021 年 7 月 5 日 |
| 123 | 1315.73 | 2021 年 7 月 6 日 |
| 123 | 1315.73 | 2021 年 7 月 7 日 |
| 123 | 1315.73 | 2021 年 7 月 8 日 |
| 123 | 1315.73 | 2021 年 7 月 9 日 |
| 123 | 1315.73 | 2021 年 7 月 10 日 |
| 123 | 1315.73 | 2021 年 7 月 11 日 |
| 123 | 1315.73 | 2021 年 7 月 12 日 |
| 123 | 1315.73 | 2021 年 7 月 13 日 |
| 123 | 1315.73 | 2021 年 7 月 14 日 |
| 123 | 1315.73 | 2021 年 7 月 15 日 |
| 123 | 1315.73 | 2021 年 7 月 16 日 |
| 123 | 1315.73 | 2021 年 7 月 17 日 |
| 123 | 1315.73 | 2021 年 7 月 18 日 |
| 123 | 1315.73 | 2021 年 7 月 19 日 |
| 123 | 1315.73 | 2021 年 7 月 20 日 |
| 123 | 1315.73 | 2021 年 7 月 21 日 |
| 123 | 1315.73 | 2021 年 7 月 22 日 |
| 123 | 1315.73 | 2021 年 7 月 23 日 |
| 123 | 1315.73 | 2021 年 7 月 24 日 |
| 123 | 1315.73 | 2021 年 7 月 25 日 |
| 123 | 1315.73 | 2021 年 7 月 26 日 |
| 123 | 1315.73 | 2021 年 7 月 27 日 |
| 123 | 1315.73 | 2021 年 7 月 28 日 |
| 123 | 1315.73 | 2021 年 7 月 29 日 |
| 123 | 1315.74 | 2021 年 7 月 30 日 |
| 123 | 1315.74 | 2021 年 8 月 1 日 |
我可以通過使用它來獲得連續日期,但不知道如何將它與它的其余部分聯系起來。
DECLARE @startdate date = '20210701'
DECLARE @enddate date = '20210930'
;WITH Dates AS
(SELECT convert(date, @startdate) as Date
UNION ALL
SELECT DATEADD(day, 1, Date)
FROM Dates
WHERE DATEADD(day, 1, Date) <= @enddate
)
SELECT DATE
FROM DATES
uj5u.com熱心網友回復:
我發現通過首先為記錄匯出 ExpiryDate,然后使用帶有 BETWEEN 條件的連接(到 DATES)更容易做到這一點,如下所示:
With Dates AS
(SELECT convert(date, @startdate) as Date
UNION ALL
SELECT DATEADD(day, 1, Date)
FROM Dates
WHERE DATEADD(day, 1, Date) <= @enddate
),
MtblTV as /* Time-variant data; add ExpiryDate */
(
select T.*,
ExpiryDate=dateadd(day, -1,
LEAD(EffectiveDate, 1, '3000-12-31')
over (partition by AcctNbr
order by EffectiveDate asc))
from MyTbl T
)
select *
from Dates D
inner join
MtblTV T
on D.Date between T.EffectiveDate and T.ExpiryDate
order by date
3000-12-31 只是一個虛擬值,表示該記錄尚未過期。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/410525.html
標籤:
上一篇:查詢當列有2個值時讀取
下一篇:每隔一行合并成一行
