Still celebrating National IT Professionals Day with 3 months of free Premium Membership. Use Code ITDAY17

x
Solved

# time periods

Posted on 2014-09-30
Medium Priority
120 Views
Assuming a person joined a firm on 10-01-10

I need to derive the following time periods - 10-1-10 , 9-30-11, 10-1-11 , 9-30-12, 10-1-12 , 9-30-13, pls suggest the SQL

for ex:

123            10-01-10

Result should be as below:

Customer_no        DateAdded           T1              T2             T3             T4              T5             T6

123            10-01-10            10-1-10       9-30-11     10-1-11      9-30-12     10-1-12     9-30-13
0
Question by:sqlcurious
[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
• 3
• 2
• 2
• +1

LVL 24

Expert Comment

ID: 40353309
What will the relevant dates be if he had joined on 15 October; the same or different?
0

Author Comment

ID: 40353348
10-15-10 , 10-14-11, 10-15-11 , 10-14-12, 10-15-12 , 10-14-13

These will be the relevant ones if he joined on 10-15-10
0

LVL 70

Expert Comment

ID: 40353369
SELECT Customer_no,
FROM (
SELECT 123 AS Customer_no, CAST('20101001' AS date) AS DateAdded UNION ALL
SELECT 234, '20141015'
) AS test_data
0

LVL 27

Expert Comment

ID: 40353374
Try this:
``````-- Given table
CREATE TABLE Cust (Customer_no INT, DateAdded DATE);
INSERT INTO dbo.Cust ( Customer_no, DateAdded )
VALUES  ( 123, -- Customer_no - int
),
( 124, -- Customer_no - int
);

--Example 1
FROM dbo.Cust C;
``````
Results in this:
0

Author Comment

ID: 40353508
Thanks so much Chris , but have a small issue here
requirement says that If the person was added 10-15-12, we would need time periods 10-15-12, 10-14-13 and 10-15-13 only.
So only T1, T2 and T3 will have the date values, rest of them will be null as we donot have 10-15-14 yet(it's a date in future), how would I handle that?
0

LVL 27

Accepted Solution

Chris Luttrell earned 2000 total points
ID: 40353620
OK, with the same setup table you can set up a CTE with your ranges and then use a PIVOT to get these results:
here is code for the CTE and PIVOT:
``````WITH YearRanges(Label, YearsToAdd, DaysToSubtract) AS
(
SELECT 'T1', 0, 0
UNION ALL
SELECT 'T2', 1, 1
UNION ALL
SELECT 'T3', 1, 0
UNION ALL
SELECT 'T4', 2, 1
UNION ALL
SELECT 'T5', 2, 0
UNION ALL
SELECT 'T6', 3, 1
)
SELECT * FROM
(
SELECT  C.Customer_no,
YearRanges.Label,
FROM dbo.Cust C
CROSS JOIN YearRanges
) p
PIVOT (MIN(d) FOR Label IN ([T1], [T2], [T3], [T4], [T5], [T6])) pvt
``````

The CTE is just a convenient way to create the work table, you could just as easy create a permanent helper table to hold those time period range values and use it to accomplish the same results.
0

LVL 24

Expert Comment

ID: 40354039
Nice :-)
0

Author Closing Comment

ID: 40377360
Thanks
0

## Featured Post

Question has a verified solution.

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

Ever wondered why sometimes your SQL Server is slow or unresponsive with connections spiking up but by the time you go in, all is well? The following article will show you how to install and configure a SQL job that will send you email alerts includâ€¦
What if you have to shut down the entire Citrix infrastructure for hardware maintenance, software upgrades or "the unknown"? I developed this plan for "the unknown" and hope that it helps you as well. This article explains how to properly shut down â€¦
Via a live example, show how to extract insert data into a SQL Server database table using the Import/Export option and Bulk Insert.
Viewers will learn how to use the SELECT statement in SQL and will be exposed to the many uses the SELECT statement has.
###### Suggested Courses
Course of the Month6 days, 9 hours left to enroll