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

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

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

問題描述

假設(shè)我有這張表:

+----+-------+
| 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.

我想要這個結(jié)果:

+----+-------+
| 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,這也應(yīng)該能夠正常工作.例如,如果我 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 |
+----+-------+

認(rèn)為這可能涉及某種分析函數(shù) - 以某種方式對值列進(jìn)行分區(qū) - 但我不確定在哪里查看.

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

下面是一個在我的系統(tǒng)上處理 1000 萬行并在 20 秒內(nèi)完成的解決方案

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

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

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

相關(guān)文檔推薦

Converting Every Child Tags in to a Single Column with multiple Delimiters -SQL Server (3)(將每個子標(biāo)記轉(zhuǎn)換為具有多個分隔符的單列-SQL Server (3))
How can I create a view from more than one table?(如何從多個表創(chuàng)建視圖?)
Create calculated value based on calculated value inside previous row(根據(jù)前一行內(nèi)的計算值創(chuàng)建計算值)
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屋-程序員軟件開發(fā)技
Recursive t-sql query(遞歸 t-sql 查詢)
Convert Month Name to Date / Month Number (Combinations of Questions amp; Answers)(將月份名稱轉(zhuǎn)換為日期/月份編號(問題和答案的組合))
主站蜘蛛池模板: 久久久久久一区 | 在线观看中文字幕亚洲 | 国产精品亚洲成在人线 | 美美女高清毛片视频免费观看 | 中文字幕高清 | 久久久国产一区二区三区四区小说 | 亚洲精品久久久久久首妖 | 亚洲一区在线日韩在线深爱 | 免费在线观看av片 | 亚洲免费网址 | 色综合九九 | 可以免费看的毛片 | 视频三区| www免费视频 | 久久久久久久久久久91 | 欧美一级黄色免费 | 日韩高清中文字幕 | 日韩中文一区二区三区 | 丁香六月激情 | 99热最新| 美女在线观看国产 | 色在线视频网站 | 久久国产一区 | 久久亚洲二区 | 中文字幕在线免费 | 亚洲毛片在线观看 | 国产精品久久久久久久7电影 | 九九综合九九 | 日韩精品一区二区三区在线观看 | 国产伦精品一区二区三区照片91 | 国产精品一区在线观看 | 玖玖玖在线 | 国产网站在线播放 | 亚洲视频在线看 | 中文字幕国产视频 | 午夜精品久久久久久久久久久久久 | 欧美精品欧美精品系列 | 国产精品久久久久久久免费大片 | 午夜久久| 欧美亚洲高清 | 久久www免费人成看片高清 |