Improve company productivity with a Business Account.Sign Up

x
?
Solved

SQL syntax needed.

Posted on 2011-02-14
3
Medium Priority
?
217 Views
Last Modified: 2012-05-11
I have a table that has columns for patient id, eye, visit date, monthSinceStart, measurement.

The table has patient data over a number of years.  Each visit to the clinic results in a new row in the table.

I would like to be able to delete the last year of data for every patient.  This is because I am only interested in data when a patient has completed a full year of treatment.

The column MonthsSinceStart indicates how many months has passed since the patients first visit.  On the patients first visit this column has a value of zero.

So to have a full year of data the patient must have a value of greater than 11 to be able to include him/her for one year, and greater than 23 for two years.

To be able to delete the uncompleted years I would like to look up the maximum value of MonthsSinceStart (which should be when VisitDate is at its maximum value). Then work out which year it is (simple maths divide by 12) and then delete all rows that are part of the last year.

So for a patient that has visits at 0, 3, 8, 13, 16 months I find that 16 is the maximum.  This gives a year of 1. So i want to delete the rows with 13 and 16.

Similarity a patient that has longer treatment - say 0, 3, 8, 13, 16, 20, 26, 28 - would result in a maximum value of 2 for year, and rows with 26 and 28 would be deleted.

Can someone write me the sql.  Remember its the combination of patient id and eye that must be unique here.

0
Comment
Question by:soozh
  • 2
3 Comments
 
LVL 50

Expert Comment

by:Lowfatspread
ID: 34886952
not sure you really want to delete the data...

would a view suffice?  to hide the last incomplete years data?



create view CompleteYears (
select e.*
  from Yourtable as E 
 inner join (select patientid,eye,max(monthsincestart) as MM
               from yourtable
              group by patientid,eye) as x
 on e.patientid=x.patientid
 and e.eye=x.eye
 where e.monthsincestart <= 12*(x.mm/12)

Open in new window

0
 
LVL 50

Accepted Solution

by:
Lowfatspread earned 2000 total points
ID: 34886968
to actually delete
delete 
  from Yourtable as E 
 
 where exists 
(Select 'Y'
   from (select patientid,eye,max(monthsincestart) as MM
               from yourtable
              group by patientid,eye) as x
 where e.patientid=x.patientid
   and e.eye=x.eye
   and e.monthsincestart > 12*(x.mm/12)
)

Open in new window

0
 
LVL 32

Expert Comment

by:awking00
ID: 34890292
What dbms are you using?
0

Featured Post

Free Tool: Port Scanner

Check which ports are open to the outside world. Helps make sure that your firewall rules are working as intended.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

Join & Write a Comment

This post looks at MongoDB and MySQL, and covers high-level MongoDB strengths, weaknesses, features, and uses from the perspective of an SQL user.
Article by: Tammy
MySQLTuner is a script written in Perl that allows you to review a MySQL installation quickly and make adjustments to increase performance and stability. The current configuration variables and status data is retrieved and presented in a brief forma…
With just a little bit of  SQL and VBA, many doors open to cool things like synchronize a list box to display data relevant to other information on a form.  If you have never written code or looked at an SQL statement before, no problem! ...  give i…
In the video, one can understand the process of resizing images in single or bulk. Kernel Bulk Image Resizer is an easy to use tool for resizing large number of images. One can add and resize multiple images with this tool in single go. The video sh…

608 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question