Home » SQL & PL/SQL » SQL & PL/SQL » Complex Logic using SQL (Oracle 10g)
Complex Logic using SQL [message #601340] Tue, 19 November 2013 15:19 Go to next message
achockal
Messages: 5
Registered: November 2013
Junior Member
I have data as below in my table and I would like to select only the
rows based on below logic for each ID.

--> min(Status A)
--> next status B
--> first Status A after status B
--> next status B

Is there a solution available in SQL for above logic . Also there can be multiple A & B status values in my table for each ID.


ID STATUS ACTIVITY_DATE
--- ------- --------------
1 A 01/01/2010 *
1 A 01/02/2010
1 A 01/03/2010
1 B 01/03/2010 *
1 A 01/03/2010 *
1 A 01/04/2010
1 B 01/04/2010 *

Appreciate your inputs on the same.
Re: Complex Logic using SQL [message #601341 is a reply to message #601340] Tue, 19 November 2013 15:25 Go to previous messageGo to next message
pablolee
Messages: 2882
Registered: May 2007
Location: Scotland
Senior Member
Provide a working test case.
Re: Complex Logic using SQL [message #601342 is a reply to message #601341] Tue, 19 November 2013 15:40 Go to previous messageGo to next message
BlackSwan
Messages: 26766
Registered: January 2009
Location: SoCal
Senior Member
Please read and follow the forum guidelines, to enable us to help you:

http://www.orafaq.com/forum/t/88153/0/
Re: Complex Logic using SQL [message #601343 is a reply to message #601340] Tue, 19 November 2013 16:02 Go to previous messageGo to next message
achockal
Messages: 5
Registered: November 2013
Junior Member
PFB the insert script for test data

Insert into TEST_NOTE
(NOTE_TYPE, ACTIVITY_DATE, TASK_ID)
Values
('AR', TO_DATE('11/09/2013 13:52:46', 'MM/DD/YYYY HH24:MI:SS'), 100);
Insert into TEST_NOTE
(NOTE_TYPE, ACTIVITY_DATE, TASK_ID)
Values
('AP', TO_DATE('11/10/2013 13:53:02', 'MM/DD/YYYY HH24:MI:SS'), 100);
Insert into TEST_NOTE
(NOTE_TYPE, ACTIVITY_DATE, TASK_ID)
Values
('AR', TO_DATE('11/10/2013 13:53:11', 'MM/DD/YYYY HH24:MI:SS'), 100);
Insert into TEST_NOTE
(NOTE_TYPE, ACTIVITY_DATE, TASK_ID)
Values
('AR', TO_DATE('11/11/2013 13:53:23', 'MM/DD/YYYY HH24:MI:SS'), 100);
Insert into TEST_NOTE
(NOTE_TYPE, ACTIVITY_DATE, TASK_ID)
Values
('AR', TO_DATE('11/12/2013 13:53:31', 'MM/DD/YYYY HH24:MI:SS'), 100);
Insert into TEST_NOTE
(NOTE_TYPE, ACTIVITY_DATE, TASK_ID)
Values
('AP', TO_DATE('11/12/2013 13:53:40', 'MM/DD/YYYY HH24:MI:SS'), 100);
Insert into TEST_NOTE
(NOTE_TYPE, ACTIVITY_DATE, TASK_ID)
Values
('AR', TO_DATE('11/12/2013 13:53:48', 'MM/DD/YYYY HH24:MI:SS'), 200);
Insert into TEST_NOTE
(NOTE_TYPE, ACTIVITY_DATE, TASK_ID)
Values
('AR', TO_DATE('11/13/2013 13:54:00', 'MM/DD/YYYY HH24:MI:SS'), 200);
Insert into TEST_NOTE
(NOTE_TYPE, ACTIVITY_DATE, TASK_ID)
Values
('AP', TO_DATE('11/14/2013 13:54:17', 'MM/DD/YYYY HH24:MI:SS'), 200);
Insert into TEST_NOTE
(NOTE_TYPE, ACTIVITY_DATE, TASK_ID)
Values
('AR', TO_DATE('11/16/2013 13:54:47', 'MM/DD/YYYY HH24:MI:SS'), 200);
COMMIT;
Re: Complex Logic using SQL [message #601347 is a reply to message #601343] Tue, 19 November 2013 18:38 Go to previous messageGo to next message
cookiemonster
Messages: 13920
Registered: September 2008
Location: Rainy Manchester
Senior Member
You need to post a create table statement to.
Re: Complex Logic using SQL [message #601349 is a reply to message #601347] Tue, 19 November 2013 19:50 Go to previous messageGo to next message
achockal
Messages: 5
Registered: November 2013
Junior Member
create table test_note ( note_type varchar2(10) , activity_Date date ,task_id number);
Re: Complex Logic using SQL [message #601360 is a reply to message #601349] Wed, 20 November 2013 00:56 Go to previous message
Michel Cadot
Messages: 68645
Registered: March 2007
Location: Nanterre, France, http://...
Senior Member
Account Moderator
SQL> select test_note.*,
  2         case
  3           when lag(note_type,1,' ') over (partition by task_id order by activity_date)
  4                != note_type
  5             then '*'
  6         end flag
  7  from test_note
  8  order by task_id , activity_Date
  9  /
NOTE_TYPE  ACTIVITY_DATE          TASK_ID F
---------- ------------------- ---------- -
AR         09/11/2013 13:52:46        100 *
AP         10/11/2013 13:53:02        100 *
AR         10/11/2013 13:53:11        100 *
AR         11/11/2013 13:53:23        100
AR         12/11/2013 13:53:31        100
AP         12/11/2013 13:53:40        100 *
AR         12/11/2013 13:53:48        200 *
AR         13/11/2013 13:54:00        200
AP         14/11/2013 13:54:17        200 *
AR         16/11/2013 13:54:47        200 *
Previous Topic: Finding a valid operand between two values in a formula
Next Topic: Replace Repeating Data with Zero
Goto Forum:
  


Current Time: Fri Apr 26 08:00:38 CDT 2024