Professional Documents
Culture Documents
SQL Test
SQL Test
Test Preparation
1. You will need a 1 hour time slot to take the test and a database environment
2. Any Relational Database Allowed
3. All answers must be grammatically correct and runnable.
TEST
'jane','jones','2/2/2001','MRN-11111','3/3/2009','diabetes'
'jane','jones','2/2/2001','MRN-11111','1/3/2009','asthma'
'jane','jones','5/5/1975','MRN-88888','2/17/2009','flu'
'tom','smith','4/12/2002','MRN-22222','3/3/2009','diabetes'
'tom','smith','4/12/2002','MRN-33333','1/3/2009','asthma'
'tom','smith','4/12/2002','MRN-33333','2/7/2009','asthma'
'jack','thomas','8/10/1991','MRN-44444','3/7/2009','asthma'
You can assume that no two patients have the same firstname, lastname, and date of birth combination. However
one patient might have several visits on different days. These should all have the same medical record number.
The problem is this: Tom Smith has 2 different medical record numbers. Write a query that would always show all
the patients
who are like Tom Smith – patients with more than one medical record number.
This problem has many solutions, but if you know SQL, you should be able to find one that uses a single query with
no subqueries.
SELECT a.firstname,
a.lastname,
a.date_of_birth,
a.medical_record_number
FROM data a, data b
WHERE a.firstname = b.firstname
AND a.lastname = b.lastname
AND a.date_of_birth = b.date_of_birth
AND a.medical_record_number <> .medical_record_number
GROUP BY a.firstname,
a.lastname,
a.date_of_birth,
a.medical_record_number
SQL Problem 2 (20 min)
Given the following tables and data:
Develop a single SQL Query that computes the total invoices amount for each month, and the percentage of
change from the previous month. If there are no invoices for the month, the computed value should be null.
where l.invoiceid(+)=i.invoiceid
and i.month(+)=m.monthindex
group by m.monthindex
order by 1
SQL Problem 3 (30 min)
A banking client provides a monthly snapshot of banking data (tens of millions of accounts)
The data is sent with one row per account each month. This is stored in table called “ACCOUNTS”
Fields on the record include
There are many more columns, but the two starred (*) columns are the only ones you will need for the query.
There are no columns to tell when an account is closed, or just opened, and no separate “Account Master” – you
must use this table alone for your resultant query.
The table has been in place starting 200301, so many accounts have dozens of rows, if they have been open for
many years, and others just 1 or 2 rows, if new.
Write a query to give just a list of accountIDs that meet the following criteria.
A good account that has been open from 201403 to 201502 inclusive would have rows for
201403
201404
201405
201406
201407
201408
201409
201410
201411
201412
201501
201502
It is fine to hardcode the start month (201403), end month (201502) and the actual count of the months between
these (10 exclusive or 12 inclusive) as part of your query.
Again, the accounts must meet all 3 criteria to be a problem account. If they only have a partial set of these
records but don’t have the start month or don’t have the end month, it is not an issue, only when they have both
the specified start and end and not a full set between.
Select accountid from account where ymtd =201403 and ymtd= 201502
and
ymtd = ANY (select to_char(add_months(date '2014-03-01', level - 1), 'yyyymm') mth
from dual
connect by level <= 10)