SQL获取利润最少的日期

Posted

技术标签:

【中文标题】SQL获取利润最少的日期【英文标题】:SQL get the date with the least profit made 【发布时间】:2021-11-27 12:02:09 【问题描述】:

目前我正在查询以获取利润最少的日期。我用来做这个的表就是这个:

我提出的查询找到了获利最少的日期,但没有显示当天所赚金额的总和:

SELECT MIN(PRICE*QUANTITY) AS UMSATZ, ORDER_DATE
FROM FACT_ORDER
GROUP BY ORDER_DATE
ORDER BY UMSATZ
LIMIT 1;

所以结果是:

哪个查询可以额外显示当天的利润总和(不是附加列)?非常感谢您!

【问题讨论】:

【参考方案1】:

哪个查询可以额外显示当天获利的 SUM 金额(不是附加列)?

获取总数:

SELECT DISTINCT ORDER_DATE,
     SUM(PRICE*QUANTITY) OVER(PARTITION BY ORDER_DATE) AS UMSATZ 
FROM FACT_ORDER
QUALIFY (PRICE*QUANTITY) = MIN(PRICE*QUANTITY) OVER(PARTITION BY ORDER_DATE);

【讨论】:

谢谢!我需要补充一点,我正在使用 Snowflake -sorry。它给了我一个“PARTITION”的语法错误。 @telarewa 它应该是给雪花的。有一个错字现在已修复 哦,没错,现在可以使用了 - 谢谢!我添加了 Order By 和 LIMIT 1 以仅获得正确的第一行。 我只是注意到它没有给我搜索的最小值,而是最大值。即使使用了 MIN 函数,我也无法得到最小值。你能帮我看看吗? @telarewa 我需要使用无法重新创建您的案例的示例数据获取 CREATE TABLE。【参考方案2】:

您可以通过自联接实现此目的。

select umsatz, a.order_date, sumUmsatz from (
    select 
    min(price*quantity) as umsatz, order_date
    from FACT_ORDER 
    group by datum order by min(price*quantity)asc
)a inner join (
    select sum(price*quantity) as sumUmsatz, order_date from 
    FACT_ORDER group by order_date
) b on a.order_date = b.order_date
where rownum = 1;

【讨论】:

谢谢!我尝试了它并将 where rownum =1 替换为 LIMIT 1 以匹配 Snowflake SQL。但它给了我以下错误:SQL 编译错误:不明确的列名 'ORDER_DATE. 我编辑了上面的解决方案。 现在可以正常使用了,谢谢!

以上是关于SQL获取利润最少的日期的主要内容,如果未能解决你的问题,请参考以下文章

SQL语句获取日期的月份

sql 怎么获取日期字段的年月日

sql中如何获取当天时间的零点

基于日期获取所有日期 - sql

sql获取当前年月日

SQL语句自动获取本机日期时间