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

如何根據列的變化值對記錄進行分組/排名?

How to group/rank records based on a changing value of a column?(如何根據列的變化值對記錄進行分組/排名?)
本文介紹了如何根據列的變化值對記錄進行分組/排名?的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!

問題描述

我有下表按 Id、Year DESC 排序

<前>ID 年份有效1 2011 11 2010 11 2009 01 2002 14 2013 14 2012 14 2011 1等等.

我想要的是一個額外的排名字段,例如:

<前>Id 年份有效等級1 2011 1 11 2010 1 11 2009 0 21 2002 1 34 2013 1 14 2012 1 14 2011 1 1等等.

對于有效字段中的每個更改,基本上每個 Id 交替排名.通過這種方式,我可以在 rank=1 字段上查詢,以獲得每個 Id 的所有 Valid=1 記錄,直到第一個 Valid=0.或者是否有一種更簡單的方法來選擇匹配某個條件的第一條記錄(對于 Id=1 僅前兩條記錄).我已經玩過 ROW_NUMBER()、RANK() 和 PARTITION BY,但我似乎無法讓它工作.必須避免嵌套查詢,因為實際查詢是針對大型數據庫運行的.

有人有什么想法嗎?

謝謝和歡呼,奈奎斯特

解決方案

是的,使用 Left JOIN 我們可以做到這一點.請參閱下面的代碼和結果.

第一張圖片是實際插入的數據,第二張圖片是預期的結果.

聲明@t 表(身份證號碼,_YEAR INT,有效的 TINYINT)插入 @t( id, [_YEAR], 有效 )選擇 1,2011,1UNION ALL SELECT 1,2010,1UNION ALL SELECT 1,2009,0UNION ALL SELECT 1,2002,1UNION ALL SELECT 4,2013,1UNION ALL SELECT 4,2012,1UNION ALL SELECT 4,2011,1UNION ALL SELECT 5,2013,0UNION ALL SELECT 5,2011,1UNION ALL SELECT 5,2010,1UNION ALL SELECT 6,2010,1UNION ALL SELECT 6,2011,0UNION ALL SELECT 6,2014,1選擇 q1.*來自@t q1左加入(SELECT id,MAX(_YEAR) 零年從TWHERE 有效 = 0按 ID 分組)q2ON q1.id=q2.id在哪里(q2.ID 為空)或者(q2.id 不為空且 q1.id 不為空 AND q1.id=q2.id AND q1.[_YEAR] > q2.ZeroYear)

編輯-1:在上面對列 ZeroYear 的查詢中,之前我做了 MIN(_YEAR) 但正如你在Andriy M"的評論中看到的,而不是 MIN 正確的函數是 MAX.

I have the following table ordered by Id, Year DESC

Id   Year   Valid
1    2011   1
1    2010   1
1    2009   0
1    2002   1
4    2013   1
4    2012   1
4    2011   1
etc.

What I would like to have is an extra rank field like:

Id   Year   Valid   Rank
1    2011   1       1
1    2010   1       1
1    2009   0       2
1    2002   1       3
4    2013   1       1
4    2012   1       1
4    2011   1       1
etc.

Basically per Id alternating ranks for every change in the Valid field. In such a way I can query on the rank=1 field to have all Valid=1 records for each and every Id up to the first Valid=0. Or is there an easier way to select the first top number of records matching a certain condition (For Id=1 only the first two records). I already played with ROW_NUMBER(), RANK() and PARTITION BY but I can't seem to get it to work. Must avoid nesting of queries since the actual query is run against a large database.

Anyone any ideas?

Thanks and cheers, Nyquist

解決方案

yes, using Left JOIN we can do that. see the below code and result.

first image is actual data inserted and second image is expected result.

DECLARE @t TABLE
(
    id      INT
    ,_YEAR  INT
    ,valid  TINYINT
)
INSERT INTO @t( id, [_YEAR], valid )
            SELECT 1,2011,1
UNION ALL   SELECT 1,2010,1
UNION ALL   SELECT 1,2009,0
UNION ALL   SELECT 1,2002,1
UNION ALL   SELECT 4,2013,1
UNION ALL   SELECT 4,2012,1
UNION ALL   SELECT 4,2011,1
UNION ALL   SELECT 5,2013,0
UNION ALL   SELECT 5,2011,1
UNION ALL   SELECT 5,2010,1
UNION ALL   SELECT 6,2010,1
UNION ALL   SELECT 6,2011,0
UNION ALL   SELECT 6,2014,1


SELECT  q1.*
FROM @t q1
LEFT JOIN 
(
    SELECT id,MAX(_YEAR) ZeroYear
    FROM @t
    WHERE valid = 0
    GROUP BY id
)q2
    ON q1.id=q2.id
WHERE 
(q2.ID IS NULL)
OR
(q2.id IS NOT NULL AND q1.id IS NOT NULL AND q1.id=q2.id AND q1.[_YEAR] > q2.ZeroYear)

Edit-1: In above query for the column ZeroYear, previously i did MIN(_YEAR) but as you can see in the comment from "Andriy M" instead of MIN right function is MAX.

這篇關于如何根據列的變化值對記錄進行分組/排名?的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持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)(將月份名稱轉換為日期/月份編號(問題和答案的組合))
主站蜘蛛池模板: aaaaa毛片 | 国产在线精品一区 | 国久久| 亚洲导航深夜福利涩涩屋 | 日韩一二区在线 | 成人一区二区三区视频 | 亚洲国产精品日本 | 精品日韩一区 | 国产一级视屏 | 一区二区精品 | 日韩a在线| 亚洲激情第一页 | 免费骚视频| 中文字幕中文字幕 | 日韩久久久久 | 国产乱码精品一区二区三区中文 | 中文字幕一区二区三区不卡 | 久久久久久九九九九 | 99久久久久久99国产精品免 | 一级片免费视频 | 国产这里只有精品 | av福利网 | 国产免费一区二区 | 日韩色图视频 | 午夜精品在线观看 | 91麻豆产精品久久久久久 | 欧美一区二区三区在线播放 | 欧美a在线观看 | 国产一区二区在线播放 | 伊人网99 | 欧美性大战xxxxx久久久 | 日韩有码一区 | 日韩成人在线观看 | 久久精品一区 | 91传媒在线观看 | 搞黄网站在线观看 | 春色av| 三级欧美| 久久黄网 | 国产精品一区免费 | 亚洲一区二区三区在线播放 |