--How To Get
Previous Date/Next Date
If you are
working on date
related queries, you may have came across
scenarios where you wanted find out what is the immediate previous date
or next date.
In the
following example I have explained how to do it.
.
CREATE TABLE DEPT (Srno INT,Department VARCHAR(100),CreatedDate DATETIME)
INSERT INTO DEPT VALUES
(1,'HR',' 07/12/2012 10:30'),
(2,'HR','07/12/2012 10:41') ,
(3,'HR','08/12/2012 07:08'),
(4,'Development','07/12/2012 10:30') ,
(5,'Development','07/12/2012 11:33') ,
(6,'Testing',' 07/12/2012 17:18') ,
(7,'Testing',' 07/12/2012 10:31') ,
(8,'Testing','07/12/2012 11:38')
SELECT * FROM DEPT
--query output
Srno Department CreatedDate
-----------
------------ -----------------------
1 HR 2012-07-12 10:30:00.000
2 HR 2012-07-12 10:41:00.000
3 HR 2012-08-12 07:08:00.000
4 Development 2012-07-12 10:30:00.000
5 Development 2012-07-12 11:33:00.000
6 Testing 2012-07-12 17:18:00.000
7 Testing 2012-07-12 10:31:00.000
8 Testing 2012-07-12 11:38:00.000
--get Next Date
SELECT T1.Srno,T1.Department,T1.CreatedDate,MIN(T2.CreatedDate) AS NextDate
FROM DEPT T1
LEFT OUTER JOIN DEPT T2
ON T1.Department=T2.Department AND T1.CreatedDate<T2.CreatedDate
GROUP BY T1.Srno,T1.Department,T1.CreatedDate
--Result
Srno Department CreatedDate NextDate
-----------
------------ ----------------------- -----------------------
1 HR 2012-07-12 10:30:00.000 2012-07-12 10:41:00.000
2 HR 2012-07-12 10:41:00.000 2012-08-12 07:08:00.000
3 HR 2012-08-12 07:08:00.000 NULL
4 Development 2012-07-12 10:30:00.000 2012-07-12 11:33:00.000
5 Development 2012-07-12 11:33:00.000 NULL
6 Testing 2012-07-12 17:18:00.000 NULL
7 Testing 2012-07-12 10:31:00.000 2012-07-12 11:38:00.000
8 Testing 2012-07-12 11:38:00.000 2012-07-12 17:18:00.000
--get Previous
Date
SELECT T1.Srno,T1.Department,T1.CreatedDate,MAX(T2.CreatedDate) AS PreviousDate
FROM DEPT T1
LEFT OUTER JOIN DEPT T2
ON T1.Department=T2.Department AND T1.CreatedDate>T2.CreatedDate
GROUP BY T1.Srno,T1.Department,T1.CreatedDate
--Result
Srno Department CreatedDate PreviousDate
-----------
-------------- ----------------------- -----------------------
1 HR 2012-07-12 10:30:00.000 NULL
2 HR 2012-07-12 10:41:00.000 2012-07-12 10:30:00.000
3 HR 2012-08-12 07:08:00.000 2012-07-12 10:41:00.000
4 Development 2012-07-12 10:30:00.000 NULL
5 Development 2012-07-12 11:33:00.000 2012-07-12 10:30:00.000
6 Testing 2012-07-12 17:18:00.000 2012-07-12 11:38:00.000
7 Testing 2012-07-12 10:31:00.000 NULL
8
Testing 2012-07-12 11:38:00.000 2012-07-12 10:31:00.000
Let me know if you know any other methods.
No comments:
Post a Comment