SQL查询帮助查找每天的最高订单值

SQL查询帮助查找每天的最高订单值,sql,oracle,oracle-apex-5.1,Sql,Oracle,Oracle Apex 5.1,我有两张表,Customer和Order 在Order表中,我有一个名为date\u time的列,它存储订单的日期和时间。我还有客户ID 我想获取当天价值最高的订单的客户ID 这是检索每天金额最高的订单的查询: SELECT MAX(order_amount) AS "Highest Day Amount", to_char(date_time, 'dd/mm/yyyy') AS "ORDER DATE" FROM orde

我有两张表,
Customer
Order

Order
表中,我有一个名为
date\u time
的列,它存储订单的日期和时间。我还有
客户ID

我想获取当天价值最高的订单的客户ID

这是检索每天金额最高的订单的查询:

SELECT 
    MAX(order_amount) AS "Highest Day Amount", 
    to_char(date_time, 'dd/mm/yyyy') AS "ORDER DATE"
FROM 
    orders
GROUP BY 
    to_char(date_time, 'dd/mm/yyyy');

我需要使用<代码> toyChar < /C> >因为<代码> DATEYTIME/<代码>列包含日期和时间(例如:19/05/2021 17:50),如果我不使用<代码> toyChar < /Cord>,因为我每天有一个以上的命令,因为时间成分,它会考虑日期不同。它将在当天列出两份订单,而不是总数最高的一份订单

然后我想从这些订单中获取客户id,但是我不知道如何做

我想获取当天价值最高的订单的客户ID

您不需要将
转换为\u char()
,但如何截断到日期取决于数据库。关键思想是您希望使用窗口功能:

SELECT o.*
FROM (SELECT o.*,
             ROW_NUMBER() OVER (PARTITION BY to_char(date_time, 'YYYY-MM-DD') ORDER BY order_amount DESC) as seqnum
      FROM orders o
     ) o
WHERE seqnum = 1;
这将返回订单金额最高的整行。您可以根据需要设置结果集的格式

在Oracle中,您可以通过聚合实现这一点。我建议:

select trunc(date_time), max(order_amount),
       max(customer_id) keep (dense_rank first order by order_amount desc) as customer_id
from orders o
group by trunc(date_time);

keep
语法是Oracle(相当详细)实现“第一”聚合功能的方式。

您只需将客户IDcto添加到select和group by即可

SELECT MAX(order_amount) as "Highest Day Amount", to_char(date_time, 'dd/mm/yyyy') AS "ORDER DATE", customerID
 FROM orders GROUP BY to_char(date_time, 'dd/mm/yyyy'), customerID

如果您想从客户那里获得更多详细信息,您需要将此表加入到客户表中

用您正在使用的数据库标记您的问题。您是一个天才这正是我一直在寻找的,非常感谢