在 presto 上的每个窗口分区上选择不同的名称和用户名

Posted

技术标签:

【中文标题】在 presto 上的每个窗口分区上选择不同的名称和用户名【英文标题】:select distinct name and username on each window partition on presto 【发布时间】:2021-06-05 14:10:20 【问题描述】:

我在 presto 上使用窗口函数来获取每个组的不同名称和用户名行。我确实在我的 name 列上应用了ROW_NUMBER() 分区,其中 datetime 列作为 order by,我得到以下结果

电流输出:

name    top_user     Count           Date         Price  Percent  Volume      username   
ENZC    1            5   2021-03-07 08:11:14.000 0.1189  45.05   86131409    DeviantImmortal
ENZC    5            5   2021-03-07 08:11:14.000 0.1189  45.05   86131409    OtcRock
ENZC    2            5   2021-03-07 08:11:14.000 0.1189  45.05   86131409    OtcRock
ENZC    3            5   2021-03-07 08:11:14.000 0.1189  45.05   86131409    STOCKAHOLIC55
ENZC    4            5   2021-03-07 08:11:14.000 0.1189  45.05   86131409    stockpro20
HCMC    3            5   2021-03-07 08:34:33.000 0.0002  15.2    1376689232  Barta57
HCMC    5            5   2021-03-07 08:34:33.000 0.0002  15.2    1376689232  PennyProfitPro
HCMC    2            5   2021-03-07 08:34:33.000 0.0002  15.2    1376689232  Stocktipstoday1
HCMC    1            5   2021-03-07 08:34:33.000 0.0002  15.2    1376689232  TTrader1976
HCMC    4            5   2021-03-07 08:34:33.000 0.0002  15.2    1376689232  stockpro20
HQGE    5            6   2021-03-07 07:40:38.000 -0.0017 -16.04  63596752    BerkshireCapGrp
HQGE    1            6   2021-03-07 07:40:38.000 -0.0017 -16.04  63596752    OwnThePlayOTC
HQGE    2            6   2021-03-07 07:40:38.000 -0.0017 -16.04  63596752    PennyStockGeeks
HQGE    3            6   2021-03-07 07:40:38.000 -0.0017 -16.04  63596752    TaylorB16445829
HQGE    4            6   2021-03-07 07:40:38.000 -0.0017 -16.04  63596752    iammpremm
LTNC    2            8   2021-03-07 08:33:19.000 0.0028  10.73   293126083   BigTawno
LTNC    5            8   2021-03-07 08:33:19.000 0.0028  10.73   293126083   Faith03777244
LTNC    3            8   2021-03-07 08:33:19.000 0.0028  10.73   293126083   OneTickMoline
LTNC    1            8   2021-03-07 08:33:19.000 0.0028  10.73   293126083   OneTickMoline
LTNC    4            8   2021-03-07 08:33:19.000 0.0028  10.73   293126083   Stock_Pop
OZSC    2           10  2021-03-07 08:34:38.000 0.0685  72.87   330616866   JZavitka
OZSC    3           10  2021-03-07 08:34:38.000 0.0685  72.87   330616866   JZavitka
OZSC    1           10  2021-03-07 08:34:38.000 0.0685  72.87   330616866   S_AnglinIV
OZSC    4           10  2021-03-07 08:34:38.000 0.0685  72.87   330616866   S_AnglinIV
OZSC    5           10  2021-03-07 08:34:38.000 0.0685  72.87   330616866   claydeath1
SANP    2           5   2021-03-07 08:11:38.000 0.0049  101.04  907907634   1deadmanx
SANP    3           5   2021-03-07 08:11:38.000 0.0049  101.04  907907634   BillTsamis
SANP    5           5   2021-03-07 08:11:38.000 0.0049  101.04  907907634   Fluffypillows9
SANP    1           5   2021-03-07 08:11:38.000 0.0049  101.04  907907634   Fluffypillows9

当前查询:

SELECT * FROM 
(
SELECT  name, username , datetime, message, 
ROW_NUMBER() OVER (PARTITION BY name ORDER BY datetime ASC) AS top_user FROM table_name 
)
WHERE top_user < 6 ORDER BY name
   

预期输出:得到每个窗口分区的不同名称和用户名,即任何窗口的两行都没有相同的名称和用户名

name    top_user     Count           Date         Price  Percent  Volume      username   
ENZC    1            5   2021-03-07 08:11:14.000 0.1189  45.05   86131409    DeviantImmortal
ENZC    2            5   2021-03-07 08:11:14.000 0.1189  45.05   86131409    OtcRock
ENZC    3            5   2021-03-07 08:11:14.000 0.1189  45.05   86131409    STOCKAHOLIC55
ENZC    4            5   2021-03-07 08:11:14.000 0.1189  45.05   86131409    stockpro20
HCMC    3            5   2021-03-07 08:34:33.000 0.0002  15.2    1376689232  Barta57
HCMC    5            5   2021-03-07 08:34:33.000 0.0002  15.2    1376689232  PennyProfitPro
HCMC    2            5   2021-03-07 08:34:33.000 0.0002  15.2    1376689232  Stocktipstoday1
HCMC    1            5   2021-03-07 08:34:33.000 0.0002  15.2    1376689232  TTrader1976
HCMC    4            5   2021-03-07 08:34:33.000 0.0002  15.2    1376689232  stockpro20
HQGE    5            6   2021-03-07 07:40:38.000 -0.0017 -16.04  63596752    BerkshireCapGrp
HQGE    1            6   2021-03-07 07:40:38.000 -0.0017 -16.04  63596752    OwnThePlayOTC
HQGE    2            6   2021-03-07 07:40:38.000 -0.0017 -16.04  63596752    PennyStockGeeks
HQGE    3            6   2021-03-07 07:40:38.000 -0.0017 -16.04  63596752    TaylorB16445829
HQGE    4            6   2021-03-07 07:40:38.000 -0.0017 -16.04  63596752    iammpremm
LTNC    2            8   2021-03-07 08:33:19.000 0.0028  10.73   293126083   BigTawno
LTNC    5            8   2021-03-07 08:33:19.000 0.0028  10.73   293126083   Faith03777244
LTNC    3            8   2021-03-07 08:33:19.000 0.0028  10.73   293126083   OneTickMoline
LTNC    4            8   2021-03-07 08:33:19.000 0.0028  10.73   293126083   Stock_Pop
OZSC    2           10  2021-03-07 08:34:38.000 0.0685  72.87   330616866   JZavitka
OZSC    1           10  2021-03-07 08:34:38.000 0.0685  72.87   330616866   S_AnglinIV
OZSC    5           10  2021-03-07 08:34:38.000 0.0685  72.87   330616866   claydeath1
SANP    2           5   2021-03-07 08:11:38.000 0.0049  101.04  907907634   1deadmanx
SANP    3           5   2021-03-07 08:11:38.000 0.0049  101.04  907907634   BillTsamis
SANP    1           5   2021-03-07 08:11:38.000 0.0049  101.04  907907634   Fluffypillows9

【问题讨论】:

您的问题完全不清楚。没有名为“股票”的列。不清楚什么是“组”,也不清楚您如何选择要显示的行。 @GordonLinoff 先生。对于每个组,我的意思是相同的name 在多行上不应有相同的用户名,因为我已经存在该用户的可用用户名,所以它应该不同,否则相同是可以的 @GordonLinoff 请看一下,我现在已经编辑并发布了完整的查询 表格中是否有重复行? 我看到每个名称有多个用户名,但我也看到每个名称都有重复的用户名,例如 EZNC 的两次 OtcRock。但整行也是一样的。是这样吗? 【参考方案1】:

一种方法是过滤掉重复的用户名,首先按名称和用户名进行分区,然后再按名称进行分区:

SELECT *
FROM (
  SELECT *, ROW_NUMBER() OVER (PARTITION BY name ORDER BY datetime) rn2
  FROM (
    SELECT *, ROW_NUMBER() OVER (PARTITION BY name, username ORDER BY datetime) rn1
    FROM tablename
  ) t1
  WHERE t1.rn1 = 1 
) t2
WHERE t2.rn2 < 6

【讨论】:

你是个超级明星先生 :)

以上是关于在 presto 上的每个窗口分区上选择不同的名称和用户名的主要内容,如果未能解决你的问题,请参考以下文章

在 Greenplum DB [大数据] 上选择分区策略的更好实践

在语言选择上选择适当的 .rc 文件

浓缩咖啡测试:以编程方式在智能锁保存密码上选择“从不”

在iOS上选择图层中的元素后如何防止缩放?

在现有主窗口上显示在 PyQt GUI 上选择组合框选项的图表

在 SQL PARTITION 上选择最新项目