Please start any new threads on our new
site at https://forums.sqlteam.com. We've got lots of great SQL Server
experts to answer whatever question you can come up with.
| Author |
Topic |
|
rds207
Posting Yak Master
198 Posts |
Posted - 2011-02-10 : 13:59:24
|
Hi I need to have a condition in the which gives available hours , considering the tester whose decommision date is not greater than the day_date.I have 4 tables : 3 dimension tables and 1 fact tabledim_date : has all possible dates in all formats dim_tester : has the all the tester values , and its inception ( when the tester was bought) and decommision(when the tester was decommsioned or removed)dim_time : which has hour seg prime values , and the available hours for a dayFct_tester_utilization : this table has the keys to link all the dimension tables and the logged hours (used hours) details.i need to calculate available hours based on the inception date and decommision date.A tester is considered to be online if its between inception and decommsion date, and available hours has to be calculated for all the testers online, if the tester is decommisioned then it has the date value of when its decommsioned if not it has the far value like 12/31/9999.Here is the ddl and some sample data CREATE TABLE EDW_DIM.DIM_DATE ( DATE_KEY NUMBER(*, 0) , DAY_DATE DATE , SUN_WEEK_START_DATE DATE )Sample Data:DATE_KEY DAY_DATE SUN_WEEK_START_DATE3260 05-DEC-10 05-DEC-103261 06-DEC-10 05-DEC-103262 07-DEC-10 05-DEC-103263 08-DEC-10 05-DEC-103264 09-DEC-10 05-DEC-103265 10-DEC-10 05-DEC-103266 11-DEC-10 05-DEC-103267 12-DEC-10 12-DEC-103268 13-DEC-10 12-DEC-103269 14-DEC-10 12-DEC-103270 15-DEC-10 12-DEC-103271 16-DEC-10 12-DEC-103272 17-DEC-10 12-DEC-103273 18-DEC-10 12-DEC-103274 19-DEC-10 19-DEC-103275 20-DEC-10 19-DEC-103276 21-DEC-10 19-DEC-103277 22-DEC-10 19-DEC-103278 23-DEC-10 19-DEC-103279 24-DEC-10 19-DEC-103280 25-DEC-10 19-DEC-103281 26-DEC-10 26-DEC-103282 27-DEC-10 26-DEC-103283 28-DEC-10 26-DEC-10DIM_TESTER:CREATE TABLE EDW_DIM.DIM_TESTER ( TESTER_KEY NUMBER(10, 0) NOT NULL , TESTER_NAME VARCHAR2(25 BYTE) , TESTER_CATEGORY VARCHAR2(25 BYTE) , TESTER_INCEPTION_DATE DATE , TESTER_DECOMMISSION_DATE DATE )Sample data:TESTER_KEY TESTER_NAME TESTER_CATEGORY TESTER_INCEPTION_DATE TESTER_DECOMMISSION_DATE 401 RFR6155-2 Bench 02-NOV-06 31-DEC-99402 RFR6250-2 Bench 02-NOV-06 25-SEP-09403 RFR6250-3 Bench 02-NOV-06 31-DEC-99404 RFR6250-7 Bench 02-NOV-06 31-DEC-99405 RFR6275-2 Bench 02-NOV-06 27-MAY-08406 RFR6275-3 Bench 02-NOV-06 31-DEC-99407 SMOKY Bench 02-NOV-06 31-DEC-99408 SUGAR Bench 02-NOV-06 31-DEC-99409 ZIF-02 Bench 02-NOV-06 31-DEC-99410 ZIF-03 Bench 02-NOV-06 25-SEP-09411 ZIF-04 Bench 02-NOV-06 25-SEP-09412 ZIF-18 Bench 02-NOV-06 31-DEC-99413 ACDC ATE 05-NOV-03 09-DEC-06414 AEROSMITH ATE 05-FEB-05 15-OCT-09416 BEATLES ATE 10-APR-06 02-OCT-07417 BLAINE SIMULATOR 14-MAY-03 31-DEC-09418 BURNS SIMULATOR 02-SEP-03 31-DEC-09419 CAPOTE ATE 16-JUN-05 31-DEC-99420 CHICO ATE 03-JUN-03 31-DEC-99421 CLASH ATE 01-APR-04 09-NOV-10422 DAPHNE ATE 29-DEC-04 31-DEC-99424 EXACTA ATE 24-MAR-03 31-DEC-99425 FOGHAT ATE 16-JUN-05 31-DEC-99427 GRATEFULDEAD ATE 05-MAR-03 05-NOV-07428 GRENACHE ATE 06-JAN-06 31-DEC-99431 IDITAROD ATE 24-MAR-03 31-DEC-99432 IRONMAIDEN ATE 20-JUL-03 30-JAN-07434 LEDZEPPELIN ATE 01-FEB-05 07-NOV-10532 UFLEX1 ATE 18-SEP-07 14-OCT-08DIM_TIMECREATE TABLE EDW_DIM.DIM_TIME ( TIME_KEY NUMBER , HOUR_SEG_PRIME VARCHAR2(50 BYTE) ) Sample Data:TIME_KEY HOUR_SEG_PRIME1 AM-OS:12 AM - 7 AM61 AM-OS:12 AM - 7 AM121 AM-OS:12 AM - 7 AM181 AM-OS:12 AM - 7 AM241 AM-OS:12 AM - 7 AM301 AM-OS:12 AM - 7 AM361 AM-OS:12 AM - 7 AM421 AM-Eng:7 AM - 9 AM481 AM-Eng:7 AM - 9 AM541 Prime Time:9 AM - 7 PM601 Prime Time:9 AM - 7 PM661 Prime Time:9 AM - 7 PM721 Prime Time:9 AM - 7 PM781 Prime Time:9 AM - 7 PM841 Prime Time:9 AM - 7 PM901 Prime Time:9 AM - 7 PM961 Prime Time:9 AM - 7 PM1021 Prime Time:9 AM - 7 PM1081 Prime Time:9 AM - 7 PM1141 PM-Eng:7 PM - 10 PM1201 PM-Eng:7 PM - 10 PM1261 PM-Eng:7 PM - 10 PM1321 PM-OS:10 PM - 12 AM1381 PM-OS:10 PM - 12 AMFCT_TESTER_UTILIZATION:CREATE TABLE EDW_FACT.FCT_TESTER_UTILIZATION ( TESTER_KEY NUMBER(10, 0) , DIM_DATE_KEY NUMBER(10, 0) , DIM_TIME_KEY NUMBER(10, 0) , LOGGED_TIME NUMBER(10, 0) )Sample Data:DIM_DATE_KEY DIM_TIME_KEY TESTER_KEY LOGGED_TIME3260 1 345 603260 1 347 603261 1 707 603261 1 708 603261 1 709 603261 1 710 603261 1 711 603261 1 713 603261 1 715 603261 1 722 603261 1 723 603261 1 724 603261 1 726 603261 1 728 603261 1 730 603261 1 734 603261 1 739 603261 1 742 603261 1 745 603261 1 749 603261 1 753 603261 1 754 603261 1 759 603261 1 760 603261 1 766 603261 1 773 603261 1 775 603261 1 776 603261 1 780 603261 61 345 603261 61 355 60 I have calculated available hours : Here is my query :SQL SELECT B.HOUR_SEG_PRIME,t.tester_name,TRUNC(c.DAY_DATE + 1,'IW')-1 AS Week,c.DAY_DATE,t.tester_inception_date,t.tester_decommission_date, ( CASE WHEN B.HOUR_SEG_PRIME = 'AM-OS:12 AM - 7 AM' THEN 0.292 WHEN B.HOUR_SEG_PRIME = 'AM-Eng:7 AM - 9 AM' THEN 0.083 WHEN B.HOUR_SEG_PRIME = 'Prime Time:9 AM - 7 PM' THEN 0.417 WHEN B.HOUR_SEG_PRIME = 'PM-Eng:7 PM - 10 PM' THEN 0.125 WHEN B.HOUR_SEG_PRIME = 'PM-OS:10 PM - 12 AM' THEN 0.083 END )* 24 AS "Available_Hours"FROM dim_time B join fct_tester_utilization f on f.dim_time_key = B.time_key join dim_date con f.dim_date_key = c.date_keyjoin dim_tester ton t.tester_key = f.tester_key I have not written a where condition in the above query , could any one please assist me in writing query considering the above mentioned conditions for inception and decommision dates?Output with the above query:WEEK TESTER_NAME DAY_DATE INCEPTION_DATE DECOMMISION_DATEAVAILABLE_HOURS12/5/2010 BROWN 12/6/2010 11/2/2006 12/31/9999 10.0112/5/2010 CHICO 12/11/2010 6/3/2003 12/31/9999 3.0012/5/2010 MEGATRACE 12/8/2010 8/20/2009 8/27/2010 10.0112/5/2010 MEGATRACE 12/9/2010 8/20/2009 8/27/2010 10.0112/5/2010 MEGATRACE 12/10/2010 8/20/2009 8/27/2010 10.0112/5/2010 MERLOT 12/5/2010 3/24/2003 12/31/9999 7.0112/5/2010 MEZCAL 12/5/2010 6/2/2006 12/31/9999 7.0112/5/2010 OUZO 12/11/2010 4/23/2008 12/31/9999 1.9912/5/2010 RFALAB-080 12/9/2010 1/17/2009 12/31/9999 10.0112/5/2010 RFR6275-2 12/8/2010 11/2/2006 5/27/2008 10.0112/12/2010 MEGATRACE 12/13/2010 8/20/2009 8/27/2010 10.0112/12/2010 MEGATRACE 12/16/2010 8/20/2009 8/27/2010 10.0112/12/2010 MEZCAL 12/18/2010 6/2/2006 12/31/9999 7.0112/19/2010 MARCO 12/25/2010 3/24/2003 12/31/9999 7.0112/19/2010 MEGATRACE 12/21/2010 8/20/2009 8/27/2010 10.0112/19/2010 MEGATRACE 12/22/2010 8/20/2009 8/27/2010 10.0112/19/2010 MERLOT 12/22/2010 3/24/2003 12/31/9999 10.0112/26/2010 MALBEC 12/27/2010 4/14/2006 12/31/9999 10.0112/26/2010 MARCO 1/1/2011 3/24/2003 12/31/9999 7.0112/26/2010 MEGATRACE 12/28/2010 8/20/2009 8/27/2010 10.01 In the above output the tester MEGATRACE has already been decommsioned on 8/27/2010 but still there is a day_date , i should not calculate available hours for the testers which have already been decommisoned.Expected Output : WEEK TESTER_NAME DAY_DATE TESTER_INCEPTION_DATE TESTER_DECOMMISION_DATE AVAILABLE_HOURS12/5/2010 BROWN 12/6/2010 11/2/2006 12/31/9999 10.0112/5/2010 CHICO 12/11/2010 6/3/2003 12/31/9999 3.0012/5/2010 MERLOT 12/5/2010 3/24/2003 12/31/9999 7.0112/5/2010 MEZCAL 12/5/2010 6/2/2006 12/31/9999 7.0112/5/2010 OUZO 12/11/2010 4/23/2008 12/31/9999 1.9912/5/2010 RFALAB-080 12/9/2010 1/17/2009 12/31/9999 10.0112/12/2010 MEZCAL 12/18/2010 6/2/2006 12/31/9999 7.0112/19/2010 MARCO 12/25/2010 3/24/2003 12/31/9999 7.0112/19/2010 MERLOT 12/22/2010 3/24/2003 12/31/9999 10.0112/26/2010 MALBEC 12/27/2010 4/14/2006 12/31/9999 10.0112/26/2010 MARCO 1/1/2011 3/24/2003 12/31/9999 7.0112/26/2010 MEGATRACE 8/26/2010 8/20/2009 8/27/2010 10.01 The last day_date for Megatrace should not be greater than the decommsionned date.Please Help. |
|
|
SwePeso
Patron Saint of Lost Yaks
30421 Posts |
Posted - 2011-02-10 : 18:36:44
|
You should make the sample data usable.Edit your query to make the sample data look like INSERT ... SELECT ... UNION ALLSELECT ... UNION ALLSELECT ...So that we can copy and paste the sample data to test. N 56°04'39.26"E 12°55'05.63" |
 |
|
|
rds207
Posting Yak Master
198 Posts |
Posted - 2011-02-11 : 02:14:48
|
quote: Originally posted by Peso You should make the sample data usable.Edit your query to make the sample data look like INSERT ... SELECT ... UNION ALLSELECT ... UNION ALLSELECT ...So that we can copy and paste the sample data to test. N 56°04'39.26"E 12°55'05.63"
Here is the sample data ...[CODE]CREATE TABLE [dbo].[Available_Hours]( [WEEK] [date] NULL, [TESTER] [varchar](20) NULL, [DAY_DATE] [date] NULL, [INCEPTION_DATE] [date] NULL, [DECOMMISION_DATE] [date] NULL, [TESTER_CATEGORY] [varchar](20) NULL, [AVAILABLE_HOURS] [varchar](20) NULL) ON [PRIMARY]GOINSERT INTO [Available_Hours] ([WEEK] ,[TESTER] ,[DAY_DATE] ,[INCEPTION_DATE] ,[DECOMMISION_DATE] ,[TESTER_CATEGORY] ,[AVAILABLE_HOURS]) select '12/5/2010','BROWN','12/6/2010','11/2/2006','12/31/9999','Bench','10.008' union select '12/5/2010','CHAR-BENCH','12/10/2010','6/9/2010','12/31/9999','Bench', '10.008'union select '12/5/2010' ,'CHAR-BENCH','12/11/2010','6/9/2010','12/31/9999','Bench', '10.008'union select '12/5/2010' ,'MEGATRACE','12/7/2010','8/20/2009','8/27/2010','ATE','10.008'unionselect '12/5/2010' ,'MEGATRACE','12/8/2010','8/20/2009','8/27/2010','ATE','10.008'unionselect '12/5/2010' ,'MEGATRACE','12/9/2010','8/20/2009','8/27/2010','ATE', '10.008'unionselect '12/5/2010' ,'MEGATRACE','12/10/2010','8/20/2009','8/27/2010','ATE', '10.008'unionselect '12/5/2010' ,'MERLOT','12/5/2010','3/24/2003','12/31/9999', 'ATE', '7.008'unionselect'12/5/2010' ,'MEZCAL', '12/5/2010','6/2/2006', '12/31/9999', 'ATE', '7.008'unionselect'12/5/2010' ,'OUZO', '12/11/2010', '4/23/2008','12/31/9999', 'ATE','1.992'unionselect'12/5/2010' ,'RFR6275-2','12/8/2010','11/2/2006','5/27/2008','Bench','10.008'unionselect'12/5/2010' ,'SALUD','12/10/2010', '5/6/2004','12/31/9999', 'ATE', '10.008'unionselect'12/5/2010' ,'SALUD', '12/11/2010', '5/6/2004' ,'12/31/9999','ATE', '10.008'unionselect'12/5/2010' ,'SMOKY', '12/11/2010', '11/2/2006' ,'12/31/9999', 'Bench', '10.008'unionselect'12/5/2010' ,'ST-SAN01-01', '12/6/2010', '5/6/2008' ,'12/31/9999', 'SIMULATOR', '7.008'unionselect'12/12/2010', 'MEGATRACE', '12/13/2010', '8/20/2009' ,'8/27/2010', 'ATE', '10.008'unionselect'12/12/2010', 'MEGATRACE', '12/16/2010', '8/20/2009', '8/27/2010' ,'ATE', '10.008'unionselect'12/19/2010', 'EXACTA', '12/22/2010', '3/24/2003' ,'12/31/9999' ,'ATE', '10.008'unionselect'12/19/2010', 'EXACTA', '12/24/2010', '3/24/2003' ,'12/31/9999' ,'ATE', '7.008'unionselect'12/19/2010', 'FOGHAT', '12/24/2010', '6/16/2005' ,'12/31/9999' ,'ATE', '7.008'unionselect'12/19/2010', 'FOZZIE', '12/25/2010', '11/2/2006', '12/31/9999' ,'Bench', '10.008'unionselect'12/19/2010', 'IFLEX1A-SIN',' 12/21/2010', '8/15/2009' ,'12/31/9999', 'SIMULATOR', '10.008'unionselect'12/19/2010', 'IFLEX1A-SIN',' 12/22/2010' ,'8/15/2009', '12/31/9999', 'SIMULATOR', '10.008'unionselect'12/19/2010', 'MEGATRACE','12/21/2010', '8/20/2009' ,'8/27/2010' ,'ATE', '10.008'unionselect'12/19/2010', 'MEGATRACE','12/22/2010', '8/20/2009' ,'8/27/2010' ,'ATE', '10.008'unionselect'12/26/2010', 'MEGATRACE','12/28/2010', '8/20/2009', '8/27/2010' ,'ATE', '10.008'GO[/CODE]Please let me know the query to get available hours only for the testers online that means testers having day_date between inception and decommision dates. |
 |
|
|
SwePeso
Patron Saint of Lost Yaks
30421 Posts |
Posted - 2011-02-11 : 02:55:36
|
[code]SELECT *FROM Available_HoursWHERE Day_Date BETWEEN Inception_Date AND Decommision_Date[/code] N 56°04'39.26"E 12°55'05.63" |
 |
|
|
rds207
Posting Yak Master
198 Posts |
Posted - 2011-02-11 : 03:11:30
|
 quote: Originally posted by Peso
SELECT *FROM Available_HoursWHERE Day_Date BETWEEN Inception_Date AND Decommision_Date N 56°04'39.26"E 12°55'05.63"
|
 |
|
|
|
|
|
|
|