簡體   English   中英

將對應的日期添加到最大值

[英]Adding a corresponding date to max value

我在下面編寫的查詢為我提供了我所需的一切,除了相應的High_Water日期。 基本上,此查詢的作用很簡單。 它在整個符號生命期內為我提供了MAX值,但是我不確定如何寫入查詢,以便結果集將顯示第5列以及相應的MAX值日期!

例如,如果符號X在2015年1月1日被輸入到數據庫中,並且其中包含直到今天(2015年6月11日)的數據。 我當前的查詢將找到符號X的MAX AUM,最大值為2015年6月1日。 我需要查詢才能向我顯示2015年6月1日的日期。 基本上,我需要查詢以找到MAX值及其對應的日期,以便我知道MAX AUM反映在哪個日期。

SELECT
    A.SMBL,
    B.MLTPL,
    BEGINNING_DATE,
    ROUND(max(AUM/1000000.00)) AS HIGH_WATER_AUM      
FROM
    TBL1 A 
    JOIN TBL2 B ON A.SMBL = B.SMBL
WHERE
    A.SMBL IN = 'X' 
GROUP BY
    A.SMBL, B.MLTPL, BEGINNING_DATE
ORDER BY
    SMBL

聽起來您需要先保持/后保持:

select   a.smbl,
         b.mltpl,
         beginning_date,
         round(max(aum / 1000000.00)) as high_water_aum,
         max(high_water_date) keep (dense_rank first order by aum desc) hw_dt_of_max_row
from     tbl1 a 
         inner join tbl2 b on (a.smbl = b.smbl)
where    a.smbl = 'X'
group by a.smbl,
         b.mltpl,
         beginning_date
order by smbl;

keep (dense_rank first order by aum desc)排序為keep (dense_rank first order by aum desc)位是對aum最高的行進行排序和選擇。 (如果需要,您可以將其重寫為keep (dense_rank last order by aum) 。)

如果有多行具有最高的aum值,則存在max(high_water_date) -它只是選擇要顯示的最新high_water_date。 如果願意,可以將其更改為min(high_water_date)


這是說明原理的簡單示例:

with sample_data as (select 1 id, 20 val1 from dual union all
                     select 2 id, 10 val1 from dual union all
                     select 3 id, 40 val1 from dual union all
                     select 4 id, 100 val1 from dual union all
                     select 5 id, 70 val1 from dual union all
                     select 6 id, 100 val1 from dual union all
                     select 7 id, 80 val1 from dual union all
                     select 8 id, 70 val1 from dual union all
                     select 9 id, 90 val1 from dual)
select max(val1) max_val1,
       max(id) keep (dense_rank first order by val1 desc) max_val1_max_id1,
       max(id) keep (dense_rank last order by val1) max_val1_max_id2
from   sample_data;

  MAX_VAL1 MAX_VAL1_MAX_ID1 MAX_VAL1_MAX_ID2
---------- ---------------- ----------------
       100                6                6

只需創建row_number以選擇最高的行。

SELECT *
FROM 
    (
      SELECT A.SMBL, 
             B.MLTPL, 
             BEGINNING_DATE, 
             ROUND(AUM/1000000.00) AS HIGH_WATER_AUM,
             A.nav_date,      
             ROW_NUMBER() over 
                (PARTITION BY A.SMBL, B.MLTPL, BEGINNING_DATE ORDER BY AUM DESC) AS RN
      FROM TBL1 A 
      JOIN TBL2 B 
        ON A.SMBL = B.SMBL
      WHERE A.SMBL IN ('X','Y','Z')
    ) t
WHERE RN = 1
ORDER BY SMBL

這是我想要編寫的查詢。 我給了我想要的確切結果集。

SELECT A.SMBL,
       B.MLTPL,
       BEGINNING_DATE,
       ROUND(MAX(c.AUM / 1000000.00)) AS HIGH_WATER_AUM,
       max(a.nav_date) AS HIGH_WATER_AUM
FROM TBL1 A
INNER JOIN TBL2 B
        ON A.SMBL = B.SMBL
INNER JOIN (
           SELECT SMBL,
                  max(AUM) AS AUM
           FROM TBL1
           GROUP BY symbol
           ) c
        ON A.SMBL = C.SMBL
       AND c.AUM = a.AUM
WHERE A.SMBL IN ('X','Y','Z')
GROUP BY A.SMBL,
         B.MLTPL,
         BEGINNING_DATE
ORDER BY SMBL

@JuanCarlosOropeza。 我一直在尋找的結果集是

SMBL    MLTPL   BEGINNING_DATE       MAX(A.NAV_DATE)      HIGH_WATER_AUM
A        10    2008-12-01 00:00:00   2011-05-02 00:00:00         100
B        10    2011-10-04 00:00:00   2013-11-27 00:00:00         600
X        10    2008-11-24 00:00:00   2009-06-17 00:00:00         300
Y        10    2008-11-24 00:00:00   2015-03-26 00:00:00         500
Z        10    2008-12-01 00:00:00   2011-09-02 00:00:00         700

您的查詢給我的結果集是

SMBL     MLTPL  BEGINNING_DATE       MAX(A.NAV_DATE)       HIGH_WATER_AUM
A        10    2008-12-01 00:00:00   2015-10-15 00:00:00         100
B        10    2011-10-04 00:00:00   2015-10-15 00:00:00         600
X        10    2008-11-24 00:00:00   2015-10-15 00:00:00         300
Y        10    2008-11-24 00:00:00   2015-10-15 00:00:00         500
Z        10    2008-12-01 00:00:00   2015-10-15 00:00:00         700

您可以看到它如何簡單地為所有不同的符號分配日期,即使實際上它們的HIGHT_WATER_AUM在不同的日期也是如此。

暫無
暫無

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

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