|
我需要编写一个查询,以显示分解结果,该结果FormID的值基于最近的值大于5 LogDate。8 y/ Y% J, h$ Y8 T+ B
根据最近一次LogDate,如果值小于5,则应该显示该点之后大于5的值,因为如果您愿意,则5以下的值将被“重置”。) |+ ]6 j8 x& O2 H4 I9 A. Y
我实质上是在查看最近的连续LogDate记录,这些记录大于5。
j- F' m* { _' R- w8 h, K假设我们有以下记录集:& P5 }' r8 ^( z: r
FormID Value LogDate * u& |+ p: J* d7 ^
--------------------------% B s1 F% \3 @1 C T. G
Form2 6 10/12/19
% r7 g) h, D/ q, j3 p, Q" ^Form2 7 10/13/19 , W, ~! W! [9 p8 r& F$ O
Form1 8 10/12/191 Q6 i u6 I' K1 J6 n& Z( a9 K* G1 [
Form1 12 10/12/19, t6 w& Q- V5 `9 F
Form1 3 10/14/19- m4 P2 R" X6 R7 d
Form1 8 10/15/19
+ W+ P; ?. N: i% X/ R2 b( ?# K# {Form1 6 10/21/198 b4 L3 V Q- e
以下将返回以下内容(请注意,我也想显示row_num:
6 Q; w, N# _+ a5 r4 ?: u9 l FormID Value LogDate row_num
- x& e9 I; x1 v) _ ----------------------------------
) ?# I$ Z0 X8 S7 f" D( c4 ?& j Form2 6 10/12/19 1( M. |, e9 c2 G" ]; l& i4 J
Form2 7 10/13/19 2
; J+ ^4 K) h3 e" t" H Form1 8 10/15/19 1
9 W7 i5 I7 o' `' c; | Form1 6 10/21/19 2
' q( k+ }; i) z0 {( |请注意,在上面的示例中,由于以下记录的最近值小于5(值3),因此我们需要获取大于5的记录。5 o& n8 Z5 E* ~$ w5 H! w
另一个例子:
; R/ |) C% j5 OFormID Value LogDate
7 p+ R/ [' U' TForm1 8 10/15/19
t& O: M Z% x# S5 v; M) b3 XForm1 3 10/21/194 L s* f( {# z1 D* r
结果:不会显示任何结果,因为最近的记录中有大于5的记录
0 ?% \6 w9 q: O' Y4 |7 V* ]5 L# y另一个例子:
6 U ~6 b7 b% NFormID Value LogDate
( ~' N1 \7 X, Q& E9 AForm2 4 10/12/19 + U' f' D/ U- Q: f9 y& Q5 ?% O, ?* c
Form2 3 10/13/19 . J. ?6 j+ k. p" G1 Y3 P! [+ ]
Form1 16 10/12/19
, w7 G x; P+ i( S$ W# ^2 pForm1 3 10/12/19
+ j( g: t1 J( {! s# r6 u" eForm1 3 10/14/19% I) x( ]! \8 |
Form1 8 10/15/19# j8 M1 c3 p6 g* m4 n+ @# Y. [
Form1 12 10/21/19
) D/ I6 ?! t* b! H, O结果是:
% y+ B1 u7 r* R3 S8 h! IFormID Value LogDate row_num# k; g$ h O0 J& l/ p' k1 q
Form1 8 10/15/19 1
/ `) y4 D, x8 @% @8 x/ IForm1 12 10/21/19 25 A. q9 Y3 l! O
另一个例子:
) x3 C `6 z, ^FormID Value LogDate
7 Q6 E- Z" _: M* i! S+ ~" IForm1 12 10/12/19
8 B, I3 _) J. i" ], PForm2 13 10/13/191 a8 q6 v4 N4 m, J0 X
结果:
* Y) z ]" N. z4 x) E+ `9 t1 gFormID Value LogDate row_num
% C M# ~. X; b4 A; k! X3 bForm1 12 10/12/19 1 - V8 }2 l H% c+ w) Y1 i# x9 Z
Form2 13 10/13/19 2
" V7 C: P" n+ i, U2 r2 d据我了解,这可以通过LAG函数来完成,但不确定如何将其完全结合在一起。
/ D3 M3 q6 x9 O; R3 ^我们可以执行以下操作:
! D5 p% K4 f9 t2 ]1 t% Y DECLARE @mytable TABLE. F3 ~' {) O! c- k
(' T( `3 }- d* N) @5 [1 X; E
FormID VARCHAR(50),
) C( P- m. B( C [Value] INT, ' t, p, c7 t- ?. ]/ O4 S0 {
LogDate DATETIME
( \* a$ h% l* t' `' [9 [2 @" B )
5 h( ?: \( V7 l select t.*,
4 u" x9 c" T; o. l$ K lag(value) over(partition by formid order by logdate) lag_value
7 x Z* t; X( g% t: g from @mytablet4 D9 {* }: R* a- L6 H/ r' x
但是不确定如何将它们组合在一起。9 o5 Y/ @' D/ P0 z/ h
' Z- P0 F! M9 E9 d# Z. o
解决方案: |
|