繁体   English   中英

计算与 DISTINCT ON 中使用的列不同的唯一行 GROUP(ed)

[英]Count unique rows GROUP(ed) BY different columns than used in DISTINCT ON

我确信这个问题已经被反复询问过,但我找不到一个我可以完全理解的简单例子。

我正在尝试按一列进行重复数据删除(执行DISTINCT ON ),并按与用于重复数据删除的列不同但不引入子查询的列对COUNT记录GROUPed By

假设我有一张包含以下信息的表格:

order_num 日期 地区 时间戳_更新
001 2021-09-01 穆里卡 2021-09-02 T19:00:01Z
001 2021-09-01 穆里卡 2021-09-03 T19:00:01Z
002 2021-09-01 尤罗普 2021-09-02T19:00:01Z
003 2021-09-01 尤罗普 2021-09-03T19:00:01Z
004 2021-09-02 尤罗普 2021-09-03T19:00:01Z

我想首先获得具有不同order_num (保留最近更新的)记录的唯一记录然后按dateregion对组或订单进行计数。

  • 重复数据删除(删除最旧的order_num='001A' ):

    order_num 日期 地区 时间戳_更新
    001 2021-09-01 穆里卡 2021-09-03 T19:00:01Z
    002 2021-09-01 尤罗普 2021-09-02T19:00:01Z
    003 2021-09-01 尤罗普 2021-09-03T19:00:01Z
    004 2021-09-02 尤罗普 2021-09-03T19:00:01Z
  • 然后分组并计数:

    日期 地区 数数
    2021-09-01 穆里卡 1个
    2021-09-01 尤罗普 2个
    2021-09-02 尤罗普 1个

我知道如何分别做这两件事( distinct on(order_num) + order by timestamp_updated desc )去重复,然后select count(*) + group by date, region )甚至连同子查询。 但我想尽量避免子查询,这里是 window 函数(似乎)派上用场的地方,我对这些了解 不多

我能得到的最接近的是组,但它们按每个order_num显示一条记录。 记录是正确的,但它们是重复的:

select distinct on (order_num) date, region, count(1)over (
    partition by order_num
)
from orders_table
order by order_num, timestamp_updated desc;

该查询 ^^ 显示:

日期 地区 数数
2021-09-01 穆里卡 1个 认为这是第一个001
2021-09-01 穆里卡 1个 认为这是第二个001
2021-09-01 尤罗普 2个 认为这是第一个 Yurop:002
2021-09-01 尤罗普 2个 认为这是第二个 Yurop:003
2021-09-02 尤罗普 1个

您可以获得每个order_num, date, region的最大timestamp_updated ,然后再次聚合以获取每个date, region的计数,使用window function

select distinct 
       date, 
       region, 
       count(max(timestamp_updated)) over (partition by date, region) as counts 
from t
group by order_num, date, region;

演示

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM