簡體   English   中英

需要使用 row_number() 過濾 3 列

[英]Need to filter 3 columns with row_number()

我的數據庫中有這樣的數據

---------------------------------------------------------------
shopid | shopname | keyword | date     | filename
---------------------------------------------------------------
1      | shop1    | A_key       |2020-04-24| A     
---------------------------------------------------------------
1      | shop1    | A_key       |2020-04-24| B
---------------------------------------------------------------
1      | shop1    | B_key       |2020-04-25| B     
---------------------------------------------------------------
1      | shop1    | B_key       |2020-04-25| C     
---------------------------------------------------------------
2      | shop2    | C_key       |2020-04-24| A     
---------------------------------------------------------------
2      | shop2    | C_key       |2020-04-24| B
---------------------------------------------------------------
3      | shop3    | D_key       |2020-04-24| A    
---------------------------------------------------------------
3      | shop3    | D_key       |2020-04-24| B    
---------------------------------------------------------------
3      | shop3    | E_key       |2020-04-24| A 
---------------------------------------------------------------
3      | shop3    | E_key       |2020-04-25| B
---------------------------------------------------------------

我想要的結果是來自最新文件名的最新數據

---------------------------------------------------------------
shopid | shopname | keyword | date     | filename
---------------------------------------------------------------
1      | shop1    | A_key       |2020-04-24| B
---------------------------------------------------------------
1      | shop1    | B_key       |2020-04-25| C     
---------------------------------------------------------------
2      | shop2    | C_key       |2020-04-24| B
---------------------------------------------------------------
3      | shop3    | D_key       |2020-04-24| B    
---------------------------------------------------------------
3      | shop3    | E_key       |2020-04-24| A 
---------------------------------------------------------------
3      | shop3    | E_key       |2020-04-25| B
---------------------------------------------------------------

我想知道如何使用 sql 我的 sql 做到這一點

select *,rank() over (partition by date,keyword order by filename desc) rank
from table
 order by date asc;

我想要的結果是來自最新文件名的最新數據

我不完全明白這一點。 以下返回每個商店的最新日期行:

select t.*
from (select t.*,
             rank() over (partition by shopid order by date desc) as seqnum
      from table t
     ) t
where seqnum = 1;

看起來您希望每個商店/關鍵字/日期有一行,如果有不止一行符合此條件,請使用文件名來決定哪個是最新的(C 晚於 B 等)

您可以為此使用分析:

SELECT 
  x.*
FROM 
  (
    SELECT
      *,
      row_number() over (partition by shopid,keyword,date order by filename desc) as rn
    FROM 
      table 
  ) x
WHERE 
  x.rn = 1

但我敢說你也可以用標准分組來做到這一點:

SELECT
  shopid, shopname, keyword, date, MAX(filename) as filename
FROM 
  table 
GROUP BY 
  shopid, shopname, keyword, date

如果您想開始添加其他詳細列,此方法將失敗,但據我從您的 Q 中可以看出,沒有任何

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM