久久久久久久av_日韩在线中文_看一级毛片视频_日本精品二区_成人深夜福利视频_武道仙尊动漫在线观看

T-SQL:用最新的非空值替換 NULL 的最佳方法?

T-SQL: Best way to replace NULL with most recent non-null value?(T-SQL:用最新的非空值替換 NULL 的最佳方法?)
本文介紹了T-SQL:用最新的非空值替換 NULL 的最佳方法?的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!

問題描述

假設我有這張表:

+----+-------+
| id | value |
+----+-------+
|  1 |     5 |
|  2 |     4 |
|  3 |     1 |
|  4 |  NULL |
|  5 |  NULL |
|  6 |    14 |
|  7 |  NULL |
|  8 |     0 |
|  9 |     3 |
| 10 |  NULL |
+----+-------+

我想編寫一個查詢,將任何 NULL 值替換為該列中表中不為空的最后一個值.

I want to write a query that will replace any NULL value with the last value in the table that was not null in that column.

我想要這個結果:

+----+-------+
| id | value |
+----+-------+
|  1 |     5 |
|  2 |     4 |
|  3 |     1 |
|  4 |     1 |
|  5 |     1 |
|  6 |    14 |
|  7 |    14 |
|  8 |     0 |
|  9 |     3 |
| 10 |     3 |
+----+-------+

如果以前的值不存在,則 NULL 是可以的.理想情況下,即使使用 ORDER BY,這也應該能夠正常工作.例如,如果我 ORDER BY [id] DESC:

If no previous value existed, then NULL is OK. Ideally, this should be able to work even with an ORDER BY. So for example, if I ORDER BY [id] DESC:

+----+-------+
| id | value |
+----+-------+
| 10 |  NULL |
|  9 |     3 |
|  8 |     0 |
|  7 |     0 |
|  6 |    14 |
|  5 |    14 |
|  4 |    14 |
|  3 |     1 |
|  2 |     4 |
|  1 |     5 |
+----+-------+

如果我ORDER BY [value] DESC:

+----+-------+
| id | value |
+----+-------+
|  6 |    14 |
|  1 |     5 |
|  2 |     4 |
|  9 |     3 |
|  3 |     1 |
|  8 |     0 |
|  4 |     0 |
|  5 |     0 |
|  7 |     0 |
| 10 |     0 |
+----+-------+

認為這可能涉及某種分析函數 - 以某種方式對值列進行分區 - 但我不確定在哪里查看.

I think this might involve some kind of analytic function - somehow partitioning over the value column - but I'm not sure where to look.

推薦答案

Itzik Ben-Gan 在此處介紹了最佳方法:最后一個非空謎題

The best way has been covered by Itzik Ben-Gan here:The Last non NULL Puzzle

下面是一個在我的系統上處理 1000 萬行并在 20 秒內完成的解決方案

Below is a solution which for 10 million rows and completes around in 20 seconds on my system

SELECT
  id,
  value1,
  CAST(
  SUBSTRING(
  MAX(CAST(id AS binary(4)) + CAST(value1 AS binary(4)))
  OVER (ORDER BY id
  ROWS UNBOUNDED PRECEDING),
  5, 4)
  AS int) AS lastval
FROM dbo.T1;

此解決方案假定您的 id 列已編入索引

This solution assumes your id column is indexed

這篇關于T-SQL:用最新的非空值替換 NULL 的最佳方法?的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網!

【網站聲明】本站部分內容來源于互聯網,旨在幫助大家更快的解決問題,如果有圖片或者內容侵犯了您的權益,請聯系我們刪除處理,感謝您的支持!

相關文檔推薦

Converting Every Child Tags in to a Single Column with multiple Delimiters -SQL Server (3)(將每個子標記轉換為具有多個分隔符的單列-SQL Server (3))
How can I create a view from more than one table?(如何從多個表創建視圖?)
Create calculated value based on calculated value inside previous row(根據前一行內的計算值創建計算值)
How do I stack the first two columns of a table into a single column, but also pair third column with the first column only?(如何將表格的前兩列堆疊成一列,但也僅將第三列與第一列配對?) - IT屋-程序員軟件開發技
Recursive t-sql query(遞歸 t-sql 查詢)
Convert Month Name to Date / Month Number (Combinations of Questions amp; Answers)(將月份名稱轉換為日期/月份編號(問題和答案的組合))
主站蜘蛛池模板: 亚洲一区二区av | 性久久久久久 | 国产一区二区在线播放 | 欧洲精品一区二区 | 亚洲精品aaa| 国产精品麻豆免费版 | 精品久久久久久久久久久久久久 | 国产视频一区二区在线播放 | 亚洲三级小说 | 免费黄网站在线观看 | 高清乱码男女免费观看 | 国产一区二区三区精品视频 | 天天干天天谢 | 久久精品一区二区国产 | 日韩中文在线观看 | 日韩不卡在线观看 | 天天干天天色 | 国产精品九九九九 | 久久久久久伊人 | 99一区二区三区 | 久久久久久久久国产 | 欧美日韩精品 | 97国产精品人人爽人人做 | 欧美成人一区二区三区片免费 | 日韩欧美视频 | 性生活毛片 | 日韩免费观看 | 国产一区二区在线免费 | 国产黄色三级 | 91亚洲国产 | 在线观看免费av网站 | 亚洲精品少妇 | 伊人av综合 | 久久99久久久 | 免费看a级片 | 午夜黄色小视频 | www.日韩 | 午夜无遮挡 | 婷婷狠狠 | 久久精品免费看 | 男男成人高潮片免费网站 |