Just nu i M3-nätverket
Jump to content

MAX värdet av kolumn B för varje nytt värde i kolumn A


Nuggit

Recommended Posts

Hej!

 

Jag håller på och jobbar med en vy för tillfället som ställer till oreda, framförallt i mitt huvud tror jag.

 

Tabellen som innehåller datan jag ska snygga till innehåller följande:

PART NO          VALID_FROM            DISCOUNT
0392WJ             2009-11-27                10
0392WJ             2014-01-01                20
0392WJ             2018-06-15                99
0402WJ             2014-02-01                25
 
Det jag vill ha ut är:
För varje nytt partnummer vill jag ha den raden som har högsta datumet men INTE i framtiden.
 
så i det här fallet vill jag att vyn ska innehålla följande rader
PART NO          VALID_FROM            DISCOUNT
0402WJ             2014-02-01                25
0392WJ             2014-01-01                20
 
Jag har testat med 
select * from (
select catalog_no,valid_from,discount
from discount_table
order by valid_from_date desc)
where rownum = 1
 
Men det genererar ju enbart den raden med högsta datumet, oavsett part_no
 
Hur tusan gör man detta på enklast sätt?
 
/Niklas
 
Link to comment
Share on other sites

Leta reda på de rader där det inte existerar annan rad med samma PART NO men senare datum. Använd NOT EXISTS:

 

select dt1.catalog_no, dt1.valid_from, dt1.discount
from discount_table dt1

where dt1.valid_from < current_date

and NOT EXISTS (select 1 from discount_table dt2

                where dt2.catalog_no = dt1.catalog_no

                  and dt2.valid_from < current_date

                  and dt2.valid_from > dt1.valid_from)

 

 

Alternativt, använd en sub-select för att ta fram senaste datumet:

 

select dt1.catalog_no, dt1.valid_from, dt1.discount
from discount_table dt1

where dt1.valid_from = (select max(valid_from)

                        from discount_table dt2

                        where dt2.catalog_no = dt1.catalog_no

                          and dt2.valid_from < current_date)

 

 

Eller gör ungefär samma sak, fast med en join där en GROUP BY används för att ta fram varje senaste datum för varje catalog_no:

 

 

 select dt1.catalog_no, dt1.valid_from, dt1.discount
from discount_table dt1

  JOIN (select catalog_no, max(valid_from)

        from discount_table

        where valid_from < current_date

        group by catalog_no) dt2

  ON  dt1.catalog_no = dt2.catalog_no

  AND dt1.valid_from = dt2.valid_from  

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.



×
×
  • Create New...