cancel
Showing results for 
Search instead for 
Did you mean: 

complex query WHERE criteria from different tables

Former Member
1,767

Hi all SQL Anywhere 8.0

I am using the following SQL successfully

SELECT cr_no, dated, height, weight FROM malaviya_vitals WHERE cr_no IN ( 
SELECT cr_no FROM mal_diagnosis WHERE mal_diagnosis.diag_code LIKE 
M05.%'  ) order by cr_no, dated; 

with a result set of 6605 rows

However I want to refine the result set a little more to get only the weight and height data of this group of patients only the first time the patient was seen. [dated = MIN (dated)] Need help to construct the exact syntax (should lead to a total of around 1215 rows = no. of patients with diag_code M05.---)

Any help will be appreciated

Regards

Accepted Solutions (0)

Answers (2)

Answers (2)

Former Member

Try adding the following subquery to the outer WHERE clause:

AND dated = ( SELECT MIN( t.dated )
              FROM malaviya_vitals AS t
              WHERE t.cr_no = malaviya_vitals.cr_no )
Former Member

You could also try: SELECT cr_no, min(dated) as theDated, height, weight FROM malaviya_vitals WHERE cr_no IN ( SELECT cr_no FROM mal_diagnosis WHERE mal_diagnosis.diag_code LIKE ''%M05.%'' ) group by cr_no, height, weight order by cr_no, theDated

This will create a worktable as part of the query optimisation, but if your caching is sufficient and fast enough, your performance should be good too.

Former Member

I think that gives a row for the earliest date of each unique (cr_no, height, weight) combination, rather than only a row for the first time each patient was seen.