繁体   English   中英

SQL:根据列值和 select 行值连接 2 个表,其中分组列值为最大值

[英]SQL: join 2 tables based on column value and select row values where grouped column value is max

我收到了这个查询,我想从那些一天中价格最高的客户那里获取所有名称。 如果存在多个具有相同最高价格的客户,则也应选择他们。 我设法获得了按日期分组的最高价格的客户,但我认为如果他们在同一天具有相同的最高价值,这不会给我两个客户。 名称应该是不同的。 output需要如下:

|   Name (asc)   |
------------------
| customer name |
| customer name |
| ......        |

订单表如下所示:

|Client|Price|Orderdate |
------------------------
|1     |100.0|2010.01.10|
|...   |...  | .....    |

and the Client table:

|Client_NR|Name        |
-----------------------
|1        |customer#001|
|2        |customer#002|

select distinct  k1.NAME from  Orders a LEFT JOIN Order b on a.Orderdate = b.Orderdate
JOIN Client k1  on k1.Client_NR = a.Client
where a.Price IN 
(SELECT MAX(a.Price) from Order a group by Orderdate)

order by NAME asc


我认为我的错误在于加入客户端行,但我就是想不通。 我试图在第一次加入时使用 a.price = b.price 但测试会失败。 非常感谢任何建议。

WITH cte AS ( SELECT Client.Name, 
                     RANK() OVER (PARTITION BY Orders.Orderdate 
                                  ORDER BY Orders.Price DESC) rnk
              FROM Client 
              JOIN Orders ON Client.Client_NR = Orders.Client )
SELECT Name
FROM cte
WHERE rnk = 1
ORDER BY Name

暂无
暂无

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

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