SQL查找金额何时首次达到某个值

SQL to find when amount reached a certain value for the first time

提问人:DilTeam 提问时间:1/10/2023 更新时间:1/10/2023 访问量:70

问:

我有一个有 3 列的表:.我需要找出金额首次达到 100 万的日期。在任何一天,金额都可以上升或下降。user_id, date, amount

我尝试使用,但我不知道如何找到它第一次达到 100 万的确切日期。我正在探索功能。任何指点将不胜感激。partition by user_id order by date desclead, lag

亚马逊 - Redshift ANSI-SQL

评论


答:

1赞 ahmed 1/10/2023 #1

您可以使用条件聚合,如下所示:

select user_id,
  min(case when amount >= 1000000 then date end) as expected_date
from table_name
group by user_id

如果您想检查金额正好达到 1M 的位置,请使用case when amount = 1000000 ...

如果表示金额是日期递增的累计金额,则查询将为:

select user_id,
  min(case when cumulative_amount >= 1000000 then date end) as expected_date
from 
(
  select *,
    sum(amount) over (partition by user_id order by date) cumulative_amount
  from table_name
) T
group by user_id;

评论

1赞 DilTeam 1/12/2023
谢谢。第一个 SQL 满足了我的需求。
0赞 Raging Bull 1/10/2023 #2

试试这个:

select date,
    sum(amount) as totalamount
from tablename
group by date
having totalamount>=1000000
order by date asc
limit 1

这将汇总每天的金额,并返回 1 条首次达到 1M 的记录。

SQL Fiddle 上的示例结果。

如果您希望按日期和user_id对其进行分组,请在 select 和 group by 子句中添加user_id。

select user_id, date,
    sum(amount) as totalamount
from tablename
group by user_id,date
having totalamount>=1000000
order by date asc
limit 1

示例在这里