簡體   English   中英

查找金額最大的日期

[英]Finding a date with the largest sum

我有一個交易,賬戶,損益和日期數據庫。 我需要找到最大利潤發生日期的帳戶。 我已經找到一種找到這些實際最大/最小值的方法,但是我似乎無法從中獲取實際日期。 到目前為止,我的代碼是這樣的:

Select accountnum, min(ammount)
from table
where date > '02-Jan-13'
group by accountnum
order by accountnum

理想情況下,我想查看帳戶編號,最小值或最大值,然后查看該日期。

嘗試這樣的操作,以獲取每個客戶的最小和最大金額及其發生的日期。

WITH max_amount as (
    SELECT accountnum, max(amount) amount, date
    FROM TABLE
    GROUP BY accountnum, date
),
min_amount as (
    SELECT accountnum, min(amount) amount, date
    FROM TABLE
    GROUP BY accountnum, date
)
SELECT t.accountnum, ma.amount, ma.date, mi.amount, ma.date
FROM table t
JOIN max_amount ma
ON   ma.accountnum = t.accountnum
JOIN min_amount mi
ON   mi.accountnum = t.accountnum

如果要獲取今年的數據,可以在語句末尾添加一個where子句

WHERE t.date > '02-Jan-13'

最簡單的方法是使用窗口/分析功能。 這些是ANSI標准,大多數數據庫都支持它們(MySQL和Access是兩個值得注意的例外)。

這是一種方法:

select t.accountnum, min_amount, max_amount,
       min(case when amount = min_amount then date end) as min_amount_date,
       min(case when amount = min_amount then date end) as max_amount_date,
from (Select t.*,
             min(amount) over (partition by accountnum) as min_amount,
             max(amount) over (partition by accountnum) as max_amount
      from table t
      where date > '02-Jan-13'
     ) t
group by accountnum, min_amount, max_amount;
order by accountnum

子查詢使用min()作為窗口函數來計算每個帳戶的最小和最大金額。 外部查詢選擇這些值。 然后,它使用條件聚合來獲取出現這些值中的每個值的第一個日期。

;with cte as
(
  select accountnum, ammount, date, 
  row_number() over (partition by accountnum order by ammount desc) rn,
  max(ammount) over (partition by accountnum) maxamount,
  min(ammount) over (partition by accountnum) minamount
  from table
  where date > '20130102'
)
select accountnum, 
       ammount as amount, 
       date as date_of_max_amount, 
       minamount, 
       maxamount 
from cte where rn = 1

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM