2016-08-23 80 views
2

如何使用SQL查詢從表中獲取包含最新2個版本號的記錄。 我想獲取user ids的最後2個版本的跟蹤id如何使用最新的2個版本號獲取記錄

下面是我的表說明:

TRACKING_ID , 
User_id, 
Version_number 

下面的查詢讓我有最新版本的用戶ID。

Select user_id 
from table t1 
join 
(select tracking_id,max(version_number) as version_number 
from table 
group by tracking_id) t2 
    on t1.tracking_id=t2.tracking_id 
    and t1.version_number=t2.version_number 

感謝您的回覆。

+0

你如何定義最新的版本號? –

+0

這將有助於查看示例數據/預期結果。我認爲一個簡單的分析,比如row_number over(partition by ... order by ...)會起作用。 – xQbert

+0

@xQbert:是的,它確實工作 – Leo

回答

2

我沒有完全理解這個問題,但是這樣的事情可能會讓你指向正確的方向。

WITH CTE AS (
SELECT tracking_ID, user_ID, version_number, 
Row_number() over (partition by USER_ID, Version_number desc) as RN) 
SELECT * 
FROM cte 
WHERE RN <= 2; 

我不知道,如果USER_ID或TRACKING_ID需要進行分區...

4

您可以使用ROW_NUMBER

SELECT tracking_id, 
     user_id, 
     version_number 
FROM ( SELECT *, 
       ROW_NUMBER() OVER(PARTITION BY tracking_id ORDER BY version_number DESC) AS RN 
     FROM YourTable) AS T 
WHERE RN <= 2