October 15, 2012 at 5:35 am
Hi Professional ,
I have to populate end date based on start date of next record - 1
So please sugget me how to do this in my below SQL
CREATE TABLE tmp_end_date
(ID INT,
tgs_rec_eff_dt DATE)
GO
insert into tmp_end_date values(1300505,'2012-08-01 15:57:15')
insert into tmp_end_date values(1300505,'2012-08-01 15:55:16')
insert into tmp_end_date values(1300505,'2012-07-30 11:29:34')
insert into tmp_end_date values(1300505,'1905-07-01')
GO
My SQL
WITH aa AS
(
SELECT ID,tgs_rec_eff_dt FROM tmp_end_date
)
SELECT
ROW_NUMBER()over(partition by ID order by tgs_rec_eff_dt) rownumber,
ID,
tgs_rec_eff_dt,
NULL as end_date ---populate based on start date of next record - 1
FROM aa
October 15, 2012 at 5:42 am
Next record based on what? What is the ordering here?
Sample data: -
CREATE TABLE tmp_end_date(ID INT,tgs_rec_eff_dt DATETIME);
INSERT INTO tmp_end_date
SELECT ID, tgs_rec_eff_dt
FROM (VALUES(1300505,'2012-08-01 15:57:15'),(1300505,'2012-08-01 15:55:16'),
(1300505,'2012-07-30 11:29:34'),(1300505,'1905-07-01'))a(ID, tgs_rec_eff_dt);
My guess for what you want to do: -
SELECT a.ID, a.tgs_rec_eff_dt AS startDate, b.tgs_rec_eff_dt AS endDate
FROM tmp_end_date a
OUTER APPLY (SELECT TOP 1 tgs_rec_eff_dt
FROM tmp_end_date b
WHERE a.tgs_rec_eff_dt < tgs_rec_eff_dt
ORDER BY tgs_rec_eff_dt ASC) b;
Result: -
ID startDate endDate
----------- ----------------------- -----------------------
1300505 2012-08-01 15:57:15.000 NULL
1300505 2012-08-01 15:55:16.000 2012-08-01 15:57:15.000
1300505 2012-07-30 11:29:34.000 2012-08-01 15:55:16.000
1300505 1905-07-01 00:00:00.000 2012-07-30 11:29:34.000
Viewing 2 posts - 1 through 2 (of 2 total)
You must be logged in to reply to this topic. Login to reply
This website stores cookies on your computer.
These cookies are used to improve your website experience and provide more personalized services to you, both on this website and through other media.
To find out more about the cookies we use, see our Privacy Policy