Sql 配置单元:根据年份和员工获取最小值?

Sql 配置单元:根据年份和员工获取最小值?,sql,group-by,hive,hiveql,Sql,Group By,Hive,Hiveql,我在下面有一个示例表: +--------------+------------------+-----------+--+ | orderdate | employee | minprice | +--------------+------------------+-----------+--+ | 1992-01-13 | Clerk#943 | 7328.08 | | 1992-02-21 | Clerk#328 | 3381

我在下面有一个示例表:

+--------------+------------------+-----------+--+
|  orderdate   |     employee     | minprice  |
+--------------+------------------+-----------+--+
| 1992-01-13   | Clerk#943        | 7328.08   |
| 1992-02-21   | Clerk#328        | 33818.37  |
| 1992-02-22   | Clerk#328        | 914.01    |
| 1992-03-03   | Clerk#943        | 10010.11  |
| 1992-03-19   | Clerk#158        | 2712.00   |
| 1992-03-20   | Clerk#328        | 23920.52  |
| 1992-04-05   | Clerk#158        | 919.01    |
| 1993-01-04   | Clerk#943        | 24786.27  |
| 1993-01-29   | Clerk#158        | 11856.13  |
| 1993-01-30   | Clerk#943        | 2712.00   |
| 1993-02-17   | Clerk#328        | 42958.47  |
| 1993-02-25   | Clerk#328        | 2703.00   |
我如何能够根据年份获得员工的最小值?预期产出:

+--------------+------------------+-----------+--+
|  orderdate   |     employee     | minprice  |
+--------------+------------------+-----------+--+
| 1992-01-13   | Clerk#943        | 7328.08   |
| 1992-02-22   | Clerk#328        | 914.01    |
| 1992-04-05   | Clerk#158        | 919.01    |
| 1993-01-30   | Clerk#943        | 2712.00   |
| 1993-01-29   | Clerk#158        | 11856.13  |
| 1993-02-25   | Clerk#328        | 2703.00   |
我现在所拥有的:

SELECT o_orderdate, o_employee, min(sales) AS minprice
FROM orders
INNER JOIN sales 
ON o_orderkey = s_orderkey
GROUP BY o_orderdate, o_employee
GROUPING SETS ((o_orderdate, o_employee));
查询将运行,但不按年度和基于员工进行筛选。我找不到太多关于如何在配置单元和分组集中执行此操作的文档


感谢您在这方面提供的任何帮助。

您似乎只需要一个窗口功能,而不需要聚合:

SELECT o_orderdate, o_employee, sale
FROM (SELECT o.o_orderdate, o.o_employee, s.sales,
             ROW_NUMBER() OVER (PARTITION BY o.o_employee, YEAR(o.order_date) ORDER BY s.sales) as seqnum
      FROM orders o JOIN
           sales s
           ON o.o_orderkey = s.s_orderkey
     ) os
WHERE seqnum = 1;

您期望的输出不支持“基于年份的员工最大价值”,例如“Clerk#328”。1992年,他最高的价格是33818.37!所以也许你应该解释什么是“最大价值”我的错。它应该是最小值。编辑我的帖子。嗨,戈登,谢谢你的建议答案。但是,我可以知道,根据我的上述查询,是否有可能与您的查询相同?@datanewbie96。我不明白你的评论。这回答了您提出的问题。聚合查询并不是最合适的方法。不幸的是,我需要使用聚合(特别是分组集)来执行此操作。我成功地做到了这一点。但我将投票支持这个答案,因为这是一个更好的方法,并且正确地输出了期望的结果。希望这将有助于其他人在未来。非常感谢。