0

私は取引、口座、利益/損失、および日付のデータベースを持っています。アカウントごとに最大の利益が発生する日付を見つける必要があります。これらの実際の最大値/最小値を見つける方法はすでに見つけましたが、そこから実際の日付を引き出​​すことができないようです。これまでの私のコードは次のようなものです:

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

理想的には、アカウント番号、最小または最大、そしてこれが発生した日付を確認したいと思います。

4

3 に答える 3

0

これを行う最も簡単な方法は、ウィンドウ/分析関数を使用することです。これらは ANSI 標準であり、ほとんどのデータベースがサポートしています (MySQL と Access は 2 つの注目すべき例外です)。

1 つの方法を次に示します。

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()サブクエリは、ウィンドウ関数として使用して、各アカウントの最小額と最大額を計算します。外側のクエリはこれらの値を選択します。次に、条件付き集計を使用して、これらの各値が発生した最初の日付を取得します。

于 2013-11-01T13:34:27.337 に答える
0

このようなことを試して、各顧客の最小額と最大額、およびそれが発生した日付を取得してください。

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'
于 2013-11-01T13:19:03.380 に答える
0
;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
于 2013-11-01T13:39:02.113 に答える