我需要根據(jù)交易日期獲得以下數(shù)據(jù)集的結(jié)果。示例員工為FTE 1.0,但更改為FTE 0.9。我該怎么做?
with
HrHist as
(
select *, row_number() over (partition by h.EMPLOYEE order by h.EMPLOYEE, h.BEG_DATE desc) as rownum
from dbo.HRHISTORY h
where h.FLD_NBR = 56 and h.EMPLOYEE = 123
)
select HrHist.EMPLOYEE,
format(max(HrHst.N_VALUE), '#.00') as currFTE,
format(min(HrHist.N_VALUE), '#.00') as prevFTE
from HrHist
where rownum <= 2
group by HrHist.EMPLOYEE
結(jié)果:當(dāng)前FTE不是1.0。是0.9。我希望0.9作為當(dāng)前值,1.0作為以前的值。行號可以很多,但我只關(guān)心最后兩個。
樣本數(shù)據(jù)集:
可能是這樣的:
我這么說可能是因?yàn)槟愕牟糠謫栴}與其他人不一致/你談?wù)摰氖遣淮嬖诘念I(lǐng)域
不管怎樣。。Max和Min不會給出當(dāng)前值和以前的值,它們會給出Max和Min值。如果X的當(dāng)前值小于prev值,則MAX將返回prev,MIN返回當(dāng)前值。。
相反,我們使用CASE來選擇“only the 1[current]value”或“only the 2[prev]value”,然后使用一些聚合函數(shù)(如MAX)來壓扁結(jié)果中的空值(當(dāng)rownumber為1時,row_nbr=1時的CASE將返回空值),這樣就可以為每個雇員獲得一行
它被稱為條件聚合,這是一種用于實(shí)現(xiàn)軸心的技術(shù)