Home » SQL & PL/SQL » SQL & PL/SQL » Min and Max Rates with Corresponding Dates (Oracle 10G, Windows 2003)
| Min and Max Rates with Corresponding Dates [message #572184] |
Fri, 07 December 2012 00:59  |
mmohsinaziz
Messages: 79 Registered: May 2012
|
Member |
|
|
Dear All,
I am looking for a query to find out minimun and maximum rates of an item with corresponding dates.
Please help me to findout a query to get the required result.
Here is sample data
CREATE TABLE scott.item_rate
(
code VARCHAR2(3),
rate NUMBER(10,4),
vdate DATE
);
INSERT INTO item_rate
(code, rate, vdate
)
VALUES ('001', 108.97, TO_DATE ('25-MAY-12', 'DD-MON-RR')
);
INSERT INTO item_rate
(code, rate, vdate
)
VALUES ('001', 108.97, TO_DATE ('07-APR-12', 'DD-MON-RR')
);
INSERT INTO item_rate
(code, rate, vdate
)
VALUES ('001', 105, TO_DATE ('05-DEC-12', 'DD-MON-RR')
);
INSERT INTO item_rate
(code, rate, vdate
)
VALUES ('001', 105, TO_DATE ('11-OCT-12', 'DD-MON-RR')
);
INSERT INTO item_rate
(code, rate, vdate
)
VALUES ('001', 91, TO_DATE ('02-JUL-10', 'DD-MON-RR')
);
INSERT INTO item_rate
(code, rate, vdate
)
VALUES ('001', 1, TO_DATE ('05-JUL-10', 'DD-MON-RR')
);
INSERT INTO item_rate
(code, rate, vdate
)
VALUES ('001', 1, TO_DATE ('31-AUG-10', 'DD-MON-RR')
);
scott@orcl>SELECT * FROM ITEM_RATE;
COD RATE VDATE
--- ---------- ---------
001 108.97 25-MAY-12
001 108.97 07-APR-12
001 105 05-DEC-12
001 105 11-OCT-12
001 91 02-JUL-10
001 1 05-JUL-10
001 1 31-AUG-10
7 rows selected.
The required result is
CODE MIN_RATE MIN_DATE MAX_RATE MAX_DATE
001 1 05-JUL-10 108.97 25-MAY-12
|
|
|
|
| Re: Min and Max Rates with Corresponding Dates [message #572187 is a reply to message #572184] |
Fri, 07 December 2012 01:30   |
 |
Michel Cadot
Messages: 54719 Registered: March 2007 Location: Nanterre, France, http://...
|
Senior Member Account Moderator |
|
|
Here's one solution:
SQL> with
2 data as (
3 select code, rate, vdate,
4 row_number() over (partition by code order by rate desc, vdate desc) rn1,
5 row_number() over (partition by code order by rate, vdate) rn2
6 from item_rate
7 )
8 select code,
9 max(decode(rn2, 1, rate)) min_rate,
10 max(decode(rn2, 1, vdate)) min_rate_date,
11 max(decode(rn1, 1, rate)) max_rate,
12 max(decode(rn1, 1, vdate)) max_rate_date
13 from data
14 group by code
15 /
COD MIN_RATE MIN_RATE_DA MAX_RATE MAX_RATE_DA
--- ---------- ----------- ---------- -----------
001 1 05-JUL-2010 108.97 25-MAY-2012
Regards
Michel
|
|
|
|
|
|
|
|
|
|
| Re: Min and Max Rates with Corresponding Dates [message #572261 is a reply to message #572257] |
Sun, 09 December 2012 00:54   |
 |
Michel Cadot
Messages: 54719 Registered: March 2007 Location: Nanterre, France, http://...
|
Senior Member Account Moderator |
|
|
No you have not the correct result.
The min/max dates you have are the min/max dates of the whole table when we want the min/max dates for the min/max rates.
Just execute your query with the test case and you will see your query does not return the correct result:
SQL> WITH DATA AS
2 (
3 SELECT CODE,min(RATE),max(RATE),min(vdate),max(vdate)
4 FROM ITEM_RATE
5 group by code )
6 SELECT * From data;
COD MIN(RATE) MAX(RATE) MIN(VDATE) MAX(VDATE)
--- ---------- ---------- ----------- -----------
001 1 108.97 02-JUL-2010 05-DEC-2012
Note that the subquery factoring (WITH) clause is useless in your query.
Regards
Michel
[Updated on: Tue, 11 December 2012 01:28] Report message to a moderator
|
|
|
|
|
|
| Re: Min and Max Rates with Corresponding Dates [message #572356 is a reply to message #572341] |
Tue, 11 December 2012 03:17   |
 |
sss111ind
Messages: 285 Registered: April 2012 Location: India
|
Senior Member |

|
|
SELECT code, MIN (min_date)min_date, MIN (rate2)min_rate, MAX (max_date) max_date, MAX (rate1) max_rate
FROM (SELECT code, MIN (vdate) min_date, MAX (vdate) max_date,
MAX (rate) rate1, MIN (rate) rate2
FROM item_rate ir
WHERE rate IN ((SELECT MIN (rate)
FROM item_rate), (SELECT MAX (rate)
FROM item_rate))
GROUP BY code)
GROUP BY code;
Regards,
Nathan
|
|
|
|
|
|
| Re: Min and Max Rates with Corresponding Dates [message #572359 is a reply to message #572357] |
Tue, 11 December 2012 03:27   |
 |
sss111ind
Messages: 285 Registered: April 2012 Location: India
|
Senior Member |

|
|
SELECT code, MIN (min_date)min_date, MIN (rate2)min_rate, MAX (max_date) max_date, MAX (rate1) max_rate
FROM (SELECT code, MIN (vdate) min_date, MAX (vdate) max_date,
MAX (rate) rate1, MIN (rate) rate2
FROM item_rate ir
WHERE rate IN ((SELECT MIN (rate)
FROM item_rate), (SELECT MAX (rate)
FROM item_rate))
GROUP BY code)
GROUP BY code;
Regards,
Nathan
|
|
|
|
|
|
|
|
Goto Forum:
Current Time: Thu Jun 20 05:53:26 CDT 2013
Total time taken to generate the page: 0.12185 seconds
|