Reputation: 5738
Please help me to get list of only upto 4 orders(Order ID,TagID,Name, Placed Date and DeliveryDate) from each group of Tag_ID using Oracle PL SQL query for the below Table
Order_ID Order_Name Tag_ID Order_Placed_Date Order_Delivery_Date
101 PEN 011243 02/14/2019 02/18/2019
302 PEN 011243 01/17/2019 01/20/2019
202 Eraser 011348 01/09/2019 02/12/2019
388 Eraser 011348 02/18/2019 02/20/2019
213 PEN 011243 01/19/2019 02/28/2019
291 Pencil 025489 01/11/2019 01/17/2019
450 PEN 011243 02/04/2019 02/08/2019
376 Pencil 025489 01/11/2019 01/17/2019
225 PEN 011243 02/02/2019 02/03/2019
326 Eraser 011348 02/10/2019 02/12/2019
119 Eraser 011348 02/05/2019 02/07/2019
300 PEN 011243 02/04/2019 02/08/2019
137 Eraser 011348 02/05/2019 02/07/2019
022 Pencil 025489 12/29/2018 12/31/2018
131 Pencil 025489 01/07/2019 01/08/2019
319 Pencil 025489 01/01/2019 01/03/2019
280 PEN 011243 02/04/2019 02/08/2019
127 Eraser 011348 02/05/2019 02/07/2019
161 Pencil 025489 01/02/2019 01/10/2019
241 Pencil 025489 01/11/2019 01/17/2019
I tried with the below query but getting error: ORA-00979: not a GROUP BY expression:
Select Order_ID, Order_Name,Tag_ID,Order_Placed_Date, Order_Delivery_Date
from Table1
where rownnum <=4
group by Tag_ID order by Tag_ID
Upvotes: 0
Views: 143
Reputation: 783
Use a Common Table Expression/Subquery Factoring and an Oracle Analytic Function to partition the results, instead of GROUP BY
. Then filter by order_row <= 4
:
with cte_order_detail as
(
Select
t.Order_ID,
t.Order_Name,
t.Tag_ID,
t.Order_Placed_Date,
t.Order_Delivery_Date,
row_number() over (partition by t.Tag_ID order by t.Order_ID) as order_row
from Table1 t
)
select
od.Order_ID,
od.Order_Name,
od.Tag_ID,
od.Order_Placed_Date,
od.Order_Delivery_Date
from cte_order_detail od
where od.order_row <= 4
order by od.Tag_ID,
od.Order_ID;
Output:
| ORDER_ID | ORDER_NAME | TAG_ID | ORDER_PLACED_DATE | ORDER_DELIVERY_DATE |
|----------|------------|--------|----------------------|----------------------|
| 101 | PEN | 11243 | 2019-02-14T00:00:00Z | 2019-02-18T00:00:00Z |
| 213 | PEN | 11243 | 2019-01-19T00:00:00Z | 2019-02-28T00:00:00Z |
| 225 | PEN | 11243 | 2019-02-02T00:00:00Z | 2019-02-03T00:00:00Z |
| 280 | PEN | 11243 | 2019-02-04T00:00:00Z | 2019-02-08T00:00:00Z |
| 119 | Eraser | 11348 | 2019-02-05T00:00:00Z | 2019-02-07T00:00:00Z |
| 127 | Eraser | 11348 | 2019-02-05T00:00:00Z | 2019-02-07T00:00:00Z |
| 137 | Eraser | 11348 | 2019-02-05T00:00:00Z | 2019-02-07T00:00:00Z |
| 202 | Eraser | 11348 | 2019-01-09T00:00:00Z | 2019-02-12T00:00:00Z |
| 22 | Pencil | 25489 | 2018-12-29T00:00:00Z | 2018-12-31T00:00:00Z |
| 131 | Pencil | 25489 | 2019-01-07T00:00:00Z | 2019-01-08T00:00:00Z |
| 161 | Pencil | 25489 | 2019-01-02T00:00:00Z | 2019-01-10T00:00:00Z |
| 241 | Pencil | 25489 | 2019-01-11T00:00:00Z | 2019-01-17T00:00:00Z |
Upvotes: 2