首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >需要使用row_number()过滤3列

需要使用row_number()过滤3列
EN

Stack Overflow用户
提问于 2020-06-09 18:36:42
回答 2查看 25关注 0票数 0

我的数据库中有这样的数据

代码语言:javascript
复制
---------------------------------------------------------------
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
---------------------------------------------------------------

我想要的结果是来自最新文件名的最新数据

代码语言:javascript
复制
---------------------------------------------------------------
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是

代码语言:javascript
复制
select *,rank() over (partition by date,keyword order by filename desc) rank
from table
 order by date asc;
EN

回答 2

Stack Overflow用户

发布于 2020-06-09 18:38:56

我想要的结果是最新文件名中的最新数据

我不完全理解这一点。下面返回每个商店的最新日期行:

代码语言:javascript
复制
select t.*
from (select t.*,
             rank() over (partition by shopid order by date desc) as seqnum
      from table t
     ) t
where seqnum = 1;
票数 0
EN

Stack Overflow用户

发布于 2020-06-09 18:58:33

看起来您需要为每个商店/关键字/日期占一行,如果有多个行满足此要求,则使用文件名来决定哪个是最新的(C晚于B等)。

你可以使用分析器来分析它:

代码语言:javascript
复制
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

但我敢说,您也可以使用标准分组:

代码语言:javascript
复制
SELECT
  shopid, shopname, keyword, date, MAX(filename) as filename
FROM 
  table 
GROUP BY 
  shopid, shopname, keyword, date

如果您想要开始在中添加其他detial列,此方法将失败,但据我从您的Q中可以看出,没有任何

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62280602

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档