Solved

Query to delete patients last visit.

Posted on 2013-06-09
3
223 Views
Last Modified: 2013-07-01
I have a table that contains a list of patient id's and visit years .  For example:

PatientID  VisitYear
A1              1
A1              2
A1              2
A1              3
A1              3
A2              1
A2              2
A2              2
A3              1

Open in new window


I need Query that will delete ALL the entries for the patients last year.  So the above table would look like

PatientID  VisitYear
A1              1
A1              2
A1              2
A2              1

Open in new window

0
Comment
Question by:soozh
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
3 Comments
 
LVL 22

Expert Comment

by:Thomasian
ID: 39233145
DECLARE @t TABLE (PatientID varchar(10), VisitYear int)

INSERT @t
SELECT 'A1', 1
UNION ALL SELECT 'A1', 2
UNION ALL SELECT 'A1', 2
UNION ALL SELECT 'A1', 3
UNION ALL SELECT 'A1', 3
UNION ALL SELECT 'A2', 1
UNION ALL SELECT 'A2', 2
UNION ALL SELECT 'A2', 2
UNION ALL SELECT 'A3', 1

DELETE T
FROM
	(SELECT  rn=RANK() OVER (PARTITION BY PatientID ORDER BY VisitYear DESC)
	 FROM @t
	) T
WHERE rn=1

SELECT * FROM @t

Open in new window

0
 
LVL 41

Assisted Solution

by:Sharath
Sharath earned 250 total points
ID: 39233880
Another method.
delete t1
  from YourTable t1
  join (select PatientID,max(VisitYear) VisitYear from YourTable group by PatientID) t2
    on t1.PatientID = t1.PatientID and t1.VisitYear = t2.VisitYear

Open in new window

0
 
LVL 32

Accepted Solution

by:
awking00 earned 250 total points
ID: 39237783
delete from yourtable as a
where exists
(select b.patientid, max(b.visityear)
 from yourtable as b
 group by b.patientid
 having b.patientid = a.patientid
    and max(b.visityear) = a.visityear);
0

Featured Post

MS Dynamics Made Instantly Simpler

Make Your Microsoft Dynamics Investment Count  & Drastically Decrease Training Time by Providing Intuitive Step-By-Step WalkThru Tutorials.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

I'm trying, I really am. But I've seen so many wrong approaches involving date(time) boundaries I despair about my inability to explain it. I've seen quite a few recently that define a non-leap year as 364 days, or 366 days and the list goes on. …
SQL Server engine let you use a Windows account or a SQL Server account to connect to a SQL Server instance. This can be configured immediatly during the SQL Server installation or after in the Server Authentication section in the Server properties …
This is my first video review of Microsoft Bookings, I will be doing a part two with a bit more information, but wanted to get this out to you folks.
Sometimes it takes a new vantage point, apart from our everyday security practices, to truly see our Active Directory (AD) vulnerabilities. We get used to implementing the same techniques and checking the same areas for a breach. This pattern can re…

630 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