如何使用Lead()和Lag()获得第一个非null值

巴尔迪47

我有以下查询

SELECT tb2.event_id, 
       tb2.MENU_HINT, 
       tb2.EVENT_NAME, 
       tb2.Expr1003, 
       tb2.CountWinnerNotPrice55to89Runners0to1 AS columnCount, 
       tb2.SumWinnerNotPrice55to89Runners0to1 AS columSum, 
       lead(tb2.SumWinnerNotPrice55to89Runners0to1,1)  OVER(   order by tb2.expr1003) as lead1
FROM [dbo].[tblData2] tb2
WHERE tb2.Expr1003 = '01/01/2018 ';

并返回此表:

╔═══════════╦══════════════════════════╦═════════════════╦════════════╦═════════════╦══════════╦═══════╗
║ event_id  ║ MENU_HINT                ║ EVENT_NAME      ║ Expr1003   ║ columnCount ║ columSum ║ lead1 ║
╠═══════════╬══════════════════════════╬═════════════════╬════════════╬═════════════╬══════════╬═══════╣
║ 138466815 ║ AUS / Long (AUS) 1st Jan ║ R4 1400m Hcap   ║ 01/01/2018 ║ 1           ║ 85.00    ║ NULL  ║
╠═══════════╬══════════════════════════╬═════════════════╬════════════╬═════════════╬══════════╬═══════╣
║ 138466809 ║ AUS / Long (AUS) 1st Jan ║ R1 1400m Mdn    ║ 01/01/2018 ║ 0           ║ NULL     ║ NULL  ║
╠═══════════╬══════════════════════════╬═════════════════╬════════════╬═════════════╬══════════╬═══════╣
║ 138466868 ║ AUS / MBdg (AUS) 1st Jan ║ R7 1206m Hcap   ║ 01/01/2018 ║ 0           ║ NULL     ║ NULL  ║
╠═══════════╬══════════════════════════╬═════════════════╬════════════╬═════════════╬══════════╬═══════╣
║ 138466189 ║ AUS / Inve (AUS) 1st Jan ║ R7 1400m Hcap   ║ 01/01/2018 ║ 0           ║ NULL     ║ NULL  ║
╠═══════════╬══════════════════════════╬═════════════════╬════════════╬═════════════╬══════════╬═══════╣
║ 138466864 ║ AUS / MBdg (AUS) 1st Jan ║ R5 1406m Hcap   ║ 01/01/2018 ║ 0           ║ NULL     ║ NULL  ║
╠═══════════╬══════════════════════════╬═════════════════╬════════════╬═════════════╬══════════╬═══════╣
║ 138386493 ║ AUS / Rand (AUS) 1st Jan ║ R2 1600m Hcap   ║ 01/01/2018 ║ 0           ║ NULL     ║ NULL  ║
╠═══════════╬══════════════════════════╬═════════════════╬════════════╬═════════════╬══════════╬═══════╣
║ 138466862 ║ AUS / MBdg (AUS) 1st Jan ║ R4 904m Hcap    ║ 01/01/2018 ║ 0           ║ NULL     ║ 82.53 ║
╠═══════════╬══════════════════════════╬═════════════════╬════════════╬═════════════╬══════════╬═══════╣
║ 138386464 ║ AUS / Flem (AUS) 1st Jan ║ R5 1700m Hcap   ║ 01/01/2018 ║ 1           ║ 82.53    ║ NULL  ║
╠═══════════╬══════════════════════════╬═════════════════╬════════════╬═════════════╬══════════╬═══════╣
║ 138466813 ║ AUS / Long (AUS) 1st Jan ║ R3 1400m Hcap   ║ 01/01/2018 ║ 0           ║ NULL     ║ NULL  ║
╠═══════════╬══════════════════════════╬═════════════════╬════════════╬═════════════╬══════════╬═══════╣
║ 138386488 ║ AUS / Asct (AUS) 1st Jan ║ R9 1200m Hcap   ║ 01/01/2018 ║ 0           ║ NULL     ║ 57.45 ║
╠═══════════╬══════════════════════════╬═════════════════╬════════════╬═════════════╬══════════╬═══════╣
║ 138466522 ║ AUS / Morn (AUS) 1st Jan ║ R4 1200m Hcap   ║ 01/01/2018 ║ 1           ║ 57.45    ║ 65.00 ║
╠═══════════╬══════════════════════════╬═════════════════╬════════════╬═════════════╬══════════╬═══════╣
║ 138386468 ║ AUS / Flem (AUS) 1st Jan ║ R7 2800m Listed ║ 01/01/2018 ║ 1           ║ 65.00    ║ NULL  ║
╠═══════════╬══════════════════════════╬═════════════════╬════════════╬═════════════╬══════════╬═══════╣
║ 138466181 ║ AUS / Inve (AUS) 1st Jan ║ R3 1010m Hcap   ║ 01/01/2018 ║ 0           ║ NULL     ║ NULL  ║
╠═══════════╬══════════════════════════╬═════════════════╬════════════╬═════════════╬══════════╬═══════╣
║ 138466187 ║ AUS / Inve (AUS) 1st Jan ║ R6 1600m Hcap   ║ 01/01/2018 ║ 0           ║ NULL     ║ NULL  ║
╠═══════════╬══════════════════════════╬═════════════════╬════════════╬═════════════╬══════════╬═══════╣
║ 138386486 ║ AUS / Asct (AUS) 1st Jan ║ R8 2400m Grp2   ║ 01/01/2018 ║ 0           ║ NULL     ║ NULL  ║
╠═══════════╬══════════════════════════╬═════════════════╬════════════╬═════════════╬══════════╬═══════╣
║ 138386480 ║ AUS / Asct (AUS) 1st Jan ║ R5 1600m Hcap   ║ 01/01/2018 ║ 0           ║ NULL     ║ 65.00 ║
╠═══════════╬══════════════════════════╬═════════════════╬════════════╬═════════════╬══════════╬═══════╣
║ 138386478 ║ AUS / Asct (AUS) 1st Jan ║ R4 1800m Grp3   ║ 01/01/2018 ║ 1           ║ 65.00    ║ NULL  ║
╠═══════════╬══════════════════════════╬═════════════════╬════════════╬═════════════╬══════════╬═══════╣
║ 138386497 ║ AUS / Rand (AUS) 1st Jan ║ R4 1200m Hcap   ║ 01/01/2018 ║ 0           ║ NULL     ║ NULL  ║
╠═══════════╬══════════════════════════╬═════════════════╬════════════╬═════════════╬══════════╬═══════╣
║ 138386476 ║ AUS / Asct (AUS) 1st Jan ║ R3 2200m Hcap   ║ 01/01/2018 ║ 0           ║ NULL     ║ NULL  ║
╠═══════════╬══════════════════════════╬═════════════════╬════════════╬═════════════╬══════════╬═══════╣
║ 138466177 ║ AUS / Inve (AUS) 1st Jan ║ R1 1010m Mdn    ║ 01/01/2018 ║ 0           ║ NULL     ║ NULL  ║
╠═══════════╬══════════════════════════╬═════════════════╬════════════╬═════════════╬══════════╬═══════╣
║ 138466856 ║ AUS / MBdg (AUS) 1st Jan ║ R1 904m Mdn     ║ 01/01/2018 ║ 0           ║ NULL     ║ NULL  ║
╠═══════════╬══════════════════════════╬═════════════════╬════════════╬═════════════╬══════════╬═══════╣
║ 138466518 ║ AUS / Morn (AUS) 1st Jan ║ R2 1200m 3yo    ║ 01/01/2018 ║ 0           ║ NULL     ║ NULL  ║
╠═══════════╬══════════════════════════╬═════════════════╬════════════╬═════════════╬══════════╬═══════╣
║ 138386470 ║ AUS / Flem (AUS) 1st Jan ║ R8 1400m Hcap   ║ 01/01/2018 ║ 0           ║ NULL     ║ NULL  ║
╠═══════════╬══════════════════════════╬═════════════════╬════════════╬═════════════╬══════════╬═══════╣
║ 138386466 ║ AUS / Flem (AUS) 1st Jan ║ R6 1200m Grp3   ║ 01/01/2018 ║ 0           ║ NULL     ║ 66.51 ║
╠═══════════╬══════════════════════════╬═════════════════╬════════════╬═════════════╬══════════╬═══════╣
║ 138466191 ║ AUS / Inve (AUS) 1st Jan ║ R8 1400m Cup    ║ 01/01/2018 ║ 1           ║ 66.51    ║ NULL  ║
╠═══════════╬══════════════════════════╬═════════════════╬════════════╬═════════════╬══════════╬═══════╣
║ 138466798 ║ AUS / Tera (AUS) 1st Jan ║ R5 1125m Hcap   ║ 01/01/2018 ║ 0           ║ NULL     ║ 70.00 ║
╠═══════════╬══════════════════════════╬═════════════════╬════════════╬═════════════╬══════════╬═══════╣
║ 138466821 ║ AUS / Long (AUS) 1st Jan ║ R7 1800m Hcap   ║ 01/01/2018 ║ 1           ║ 70.00    ║ 72.44 ║
╠═══════════╬══════════════════════════╬═════════════════╬════════════╬═════════════╬══════════╬═══════╣
║ 138386462 ║ AUS / Flem (AUS) 1st Jan ║ R4 2000m Hcap   ║ 01/01/2018 ║ 1           ║ 72.44    ║ 72.42 ║
╚═══════════╩══════════════════════════╩═════════════════╩════════════╩═════════════╩══════════╩═══════╝

现在,我想做的是计算字段上第一个非空值的前导。例如,对于event_id = 138466815,columnCount为85。我希望“ lead1”字段显示82.53,这是下面的下一个非null值。然后,稍后event_id = ** 138386464 **“导致1显示57.45(下面的下一个非空值)。

我不确定是否应该将参数传递给Lead函数的offset参数,但是我不知道应该使用哪个参数,也许与Coalesce一起使用?我做不到。

只是说得更清楚一点,这就是我希望lead1列显示的内容:

╔═══════════╦══════════════════════════╦═════════════════╦════════════╦═════════════╦══════════╦═══════════════╗
║ event_id  ║ MENU_HINT                ║ EVENT_NAME      ║ Expr1003   ║ columnCount ║ columSum ║ lead1         ║
╠═══════════╬══════════════════════════╬═════════════════╬════════════╬═════════════╬══════════╬═══════════════╣
║ 138466815 ║ AUS / Long (AUS) 1st Jan ║ R4 1400m Hcap   ║ 01/01/2018 ║ 1           ║ 85.00    ║ 82.53         ║
╠═══════════╬══════════════════════════╬═════════════════╬════════════╬═════════════╬══════════╬═══════════════╣
║ 138466809 ║ AUS / Long (AUS) 1st Jan ║ R1 1400m Mdn    ║ 01/01/2018 ║ 0           ║ NULL     ║ NULL          ║
╠═══════════╬══════════════════════════╬═════════════════╬════════════╬═════════════╬══════════╬═══════════════╣
║ 138466868 ║ AUS / MBdg (AUS) 1st Jan ║ R7 1206m Hcap   ║ 01/01/2018 ║ 0           ║ NULL     ║ NULL          ║
╠═══════════╬══════════════════════════╬═════════════════╬════════════╬═════════════╬══════════╬═══════════════╣
║ 138466189 ║ AUS / Inve (AUS) 1st Jan ║ R7 1400m Hcap   ║ 01/01/2018 ║ 0           ║ NULL     ║ NULL          ║
╠═══════════╬══════════════════════════╬═════════════════╬════════════╬═════════════╬══════════╬═══════════════╣
║ 138466864 ║ AUS / MBdg (AUS) 1st Jan ║ R5 1406m Hcap   ║ 01/01/2018 ║ 0           ║ NULL     ║ NULL          ║
╠═══════════╬══════════════════════════╬═════════════════╬════════════╬═════════════╬══════════╬═══════════════╣
║ 138386493 ║ AUS / Rand (AUS) 1st Jan ║ R2 1600m Hcap   ║ 01/01/2018 ║ 0           ║ NULL     ║ NULL          ║
╠═══════════╬══════════════════════════╬═════════════════╬════════════╬═════════════╬══════════╬═══════════════╣
║ 138466862 ║ AUS / MBdg (AUS) 1st Jan ║ R4 904m Hcap    ║ 01/01/2018 ║ 0           ║ NULL     ║ NULL          ║
╠═══════════╬══════════════════════════╬═════════════════╬════════════╬═════════════╬══════════╬═══════════════╣
║ 138386464 ║ AUS / Flem (AUS) 1st Jan ║ R5 1700m Hcap   ║ 01/01/2018 ║ 1           ║ 82.53    ║ 57.45         ║
╠═══════════╬══════════════════════════╬═════════════════╬════════════╬═════════════╬══════════╬═══════════════╣
║ 138466813 ║ AUS / Long (AUS) 1st Jan ║ R3 1400m Hcap   ║ 01/01/2018 ║ 0           ║ NULL     ║ NULL          ║
╠═══════════╬══════════════════════════╬═════════════════╬════════════╬═════════════╬══════════╬═══════════════╣
║ 138386488 ║ AUS / Asct (AUS) 1st Jan ║ R9 1200m Hcap   ║ 01/01/2018 ║ 0           ║ NULL     ║ NULL          ║
╠═══════════╬══════════════════════════╬═════════════════╬════════════╬═════════════╬══════════╬═══════════════╣
║ 138466522 ║ AUS / Morn (AUS) 1st Jan ║ R4 1200m Hcap   ║ 01/01/2018 ║ 1           ║ 57.45    ║ 65.00         ║
╠═══════════╬══════════════════════════╬═════════════════╬════════════╬═════════════╬══════════╬═══════════════╣
║ 138386468 ║ AUS / Flem (AUS) 1st Jan ║ R7 2800m Listed ║ 01/01/2018 ║ 1           ║ 65.00    ║ NULL          ║
╠═══════════╬══════════════════════════╬═════════════════╬════════════╬═════════════╬══════════╬═══════════════╣
║ 138466181 ║ AUS / Inve (AUS) 1st Jan ║ R3 1010m Hcap   ║ 01/01/2018 ║ 0           ║ NULL     ║ NULL          ║
╠═══════════╬══════════════════════════╬═════════════════╬════════════╬═════════════╬══════════╬═══════════════╣
║ 138466187 ║ AUS / Inve (AUS) 1st Jan ║ R6 1600m Hcap   ║ 01/01/2018 ║ 0           ║ NULL     ║ NULL          ║
╠═══════════╬══════════════════════════╬═════════════════╬════════════╬═════════════╬══════════╬═══════════════╣
║ 138386486 ║ AUS / Asct (AUS) 1st Jan ║ R8 2400m Grp2   ║ 01/01/2018 ║ 0           ║ NULL     ║ NULL          ║
╠═══════════╬══════════════════════════╬═════════════════╬════════════╬═════════════╬══════════╬═══════════════╣
║ 138386480 ║ AUS / Asct (AUS) 1st Jan ║ R5 1600m Hcap   ║ 01/01/2018 ║ 0           ║ NULL     ║ NULL          ║
╠═══════════╬══════════════════════════╬═════════════════╬════════════╬═════════════╬══════════╬═══════════════╣
║ 138386478 ║ AUS / Asct (AUS) 1st Jan ║ R4 1800m Grp3   ║ 01/01/2018 ║ 1           ║ 65.00    ║ 66.51         ║
╠═══════════╬══════════════════════════╬═════════════════╬════════════╬═════════════╬══════════╬═══════════════╣
║ 138386497 ║ AUS / Rand (AUS) 1st Jan ║ R4 1200m Hcap   ║ 01/01/2018 ║ 0           ║ NULL     ║ NULL          ║
╠═══════════╬══════════════════════════╬═════════════════╬════════════╬═════════════╬══════════╬═══════════════╣
║ 138386476 ║ AUS / Asct (AUS) 1st Jan ║ R3 2200m Hcap   ║ 01/01/2018 ║ 0           ║ NULL     ║ NULL          ║
╠═══════════╬══════════════════════════╬═════════════════╬════════════╬═════════════╬══════════╬═══════════════╣
║ 138466177 ║ AUS / Inve (AUS) 1st Jan ║ R1 1010m Mdn    ║ 01/01/2018 ║ 0           ║ NULL     ║ NULL          ║
╠═══════════╬══════════════════════════╬═════════════════╬════════════╬═════════════╬══════════╬═══════════════╣
║ 138466856 ║ AUS / MBdg (AUS) 1st Jan ║ R1 904m Mdn     ║ 01/01/2018 ║ 0           ║ NULL     ║ NULL          ║
╠═══════════╬══════════════════════════╬═════════════════╬════════════╬═════════════╬══════════╬═══════════════╣
║ 138466518 ║ AUS / Morn (AUS) 1st Jan ║ R2 1200m 3yo    ║ 01/01/2018 ║ 0           ║ NULL     ║ NULL          ║
╠═══════════╬══════════════════════════╬═════════════════╬════════════╬═════════════╬══════════╬═══════════════╣
║ 138386470 ║ AUS / Flem (AUS) 1st Jan ║ R8 1400m Hcap   ║ 01/01/2018 ║ 0           ║ NULL     ║ NULL          ║
╠═══════════╬══════════════════════════╬═════════════════╬════════════╬═════════════╬══════════╬═══════════════╣
║ 138386466 ║ AUS / Flem (AUS) 1st Jan ║ R6 1200m Grp3   ║ 01/01/2018 ║ 0           ║ NULL     ║ NULL          ║
╠═══════════╬══════════════════════════╬═════════════════╬════════════╬═════════════╬══════════╬═══════════════╣
║ 138466191 ║ AUS / Inve (AUS) 1st Jan ║ R8 1400m Cup    ║ 01/01/2018 ║ 1           ║ 66.51    ║ 70.00         ║
╠═══════════╬══════════════════════════╬═════════════════╬════════════╬═════════════╬══════════╬═══════════════╣
║ 138466798 ║ AUS / Tera (AUS) 1st Jan ║ R5 1125m Hcap   ║ 01/01/2018 ║ 0           ║ NULL     ║ NULL          ║
╠═══════════╬══════════════════════════╬═════════════════╬════════════╬═════════════╬══════════╬═══════════════╣
║ 138466821 ║ AUS / Long (AUS) 1st Jan ║ R7 1800m Hcap   ║ 01/01/2018 ║ 1           ║ 70.00    ║ 72.44         ║
╠═══════════╬══════════════════════════╬═════════════════╬════════════╬═════════════╬══════════╬═══════════════╣
║ 138386462 ║ AUS / Flem (AUS) 1st Jan ║ R4 2000m Hcap   ║ 01/01/2018 ║ 1           ║ 72.44    ║ next not null ║
╚═══════════╩══════════════════════════╩═════════════════╩════════════╩═════════════╩══════════╩═══════════════╝

另外,我不确定是否可以计算“ columnCount”中第一个非空值和第二个非空值之间的行数。例如,第一个计数为7,第二个计数为3,第三个计数为1。

戈登·利诺夫

您似乎想要下一个值where columnCount = 1,因此请按该列进行分区:

   lead(tb2.SumWinnerNotPrice55to89Runners0to1, 1) over
       (partition by columnCount
        order by tb2.expr1003
       ) as lead1

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何获得当年的第一个和最后一个日期?

如何使用Java 8流获得每个不同键的第一个值?

如何获取数组中的第一个非零值和最后一个非零值索引?

如何使用Oracle SQL获取多个列中的第一个非零/非空值和最后一个零/非空值

如何使用pymongo获取第一个和最后一个日期值

如果第一个值为null,则在合并两个值时如何获得最后一个值?

如何从变量中获取第一个和最后一个非Inf,非NaN,非NA,非0值?

如何使用react更新和显示setState上的第一个非空值?

如何使用SQL获取列中每个分区的第一个和最后一个值

多个第一个和最后一个非NA值(按组)

如何获得分组值和重复值的所有“第一个”实例?

如何在打字稿数组中查找第一个非null值?

如何使用BeautifulSoup从表中获得第一个和第三个td?

如何选择第一个NOT NULL值?

MySQL在分组后获得第一个非空值

返回列表中的第一个非NULL值;如果没有非NULL值,则返回NULL

Excel公式获取第一个和最后一个非零值

加入id或null并获得第一个结果

如何使用BFS遍历一棵树以获得第一个NP值?NLTK

使用每个列的第一个值和特定值分别更新null和特定值

如何为每行返回一系列列中的第一个非NULL值?第二个非NULL值?

如何使用 LOOKUP 函数返回第一个非空值

如何获得第一个和最后一个表格行之间的差异?

如何获得第一个非 nan 值的 df?

如何从R中的向量中提取第一个和最后一个非空值?

如何从第一个非 nan 值开始分组和计数?

如何在保持形状和索引的同时(快速)获得 DataFrame 的第一个非 Nan 每日值?

如何在excel中获得第一个非空/空值

如何使用列的第一个非空值获取其他列值?