我有以下數據按開始日期排序。我想要做的是排名產品名稱,如出現例如產品號27675是第1行,並在第一次發現這個產品,因此排名1 ...再次這個產品是第5排排名2.SQL排名重複組
然後我想要選擇沒有日期和分組,按行,產品和排名的數據。
SECTION_NAME ROW_NAME PRODUCT NAME start_date DESIRED RANK
SEW LS-1-A_1 27675 02/03/2016 14:39 1
SEW LS-1-A_1 26298 06/04/2016 16:56 1
SEW LS-1-A_1 26298 16/05/2016 16:56 1
SEW LS-1-A_1 26298 04/06/2016 09:26 1
SEW LS-1-A_1 27675 16/06/2016 16:22 2
SEW LS-1-A_1 18969 17/07/2016 12:54 1
SEW LS-1-A_1 26298 01/08/2016 10:52 2
SEW LS-1-A_1 27675 29/08/2016 08:38 3
SEW LS-1-A_1 LEVI F17 SMS 12/09/2016 13:39 1
我生產秩爲:
SECTION_NAME ROW_NAME PRODUCT NAME start_date RANK
SEW LS-1-A_1 27675 02/03/2016 14:39 1
SEW LS-1-A_1 26298 06/04/2016 16:56 1
SEW LS-1-A_1 26298 16/05/2016 16:56 2
SEW LS-1-A_1 26298 04/06/2016 09:26 3
SEW LS-1-A_1 27675 16/06/2016 16:22 2
SEW LS-1-A_1 18969 17/07/2016 12:54 1
SEW LS-1-A_1 26298 01/08/2016 10:52 4
SEW LS-1-A_1 27675 29/08/2016 08:38 3
SEW LS-1-A_1 LEVI F17 SMS 12/09/2016 13:39 1
SELECT
SECTION_NAME,
ROW_NAME,
PRODUCT_NAME,
start_date,
dense_rank() OVER (PARTITION BY product_name ORDER BY START_DATE)RANK
FROM
TABLES
Order by
SECTION_NAME,ROW_NAME,START_DATE
UPDATE ----
使用以下:
SELECT
SECTION_NAME ,
ROW_NAME,
PRODUCT_NAME [Style],
(START_DATE) as [Start dt],
SUM(isChange) OVER (PARTITION BY SECTION_NAME , ROW_NAME,product_name ORDER BY START_DATE) as rank_
FROM (SELECT SECTION_NAME,
ROW_NAME,
PRODUCT_NAME,
sd.START_DATE,
(CASE WHEN lag(PR.ROW_NAME) over (order by SD.START_DATE) = PR.ROW_NAME
THEN 0
ELSE 1
END) as IsChange
FROM
TABLES_t
) t
Order by SECTION_NAME, ROW_NAME, START_DATE;
產生以下:(在情況下的產品每行都是一樣的(10,11,12),我期望它們有相同的排名
編輯期望等級列 – Chris
行2,3,4爲什麼要有1級? – vtuhtan