Имя: Пароль:
1C
1С v8
Подскажите с запросом по периодам
0 Genayo
 
10.07.12
13:27
Имеются 2 таблицы Т1     Т2
Дата          |Значение  НачалоПериода      | КонецПериода      
--------------------      ---------------------------------------
01.01.2012 0:00:00| 10    02.06.2012 0:00:00| 05.06.2012 23:59:59
04.06.2012 0:00:00| 20    08.06.2012 0:00:00| 16.06.2012 23:59:59
10.06.2012 0:00:00| 30    20.06.2012 0:00:00| 29.06.2012 23:59:59
16.06.2012 0:00:00| 40                                          
25.06.2012 0:00:00| 50                                          
В результате нужно получить Периоды действия значений, т.е в данном примере
НачалоПериода     | КонецПериода       |Значение
--------------------------------------------    
02.06.2012 0:00:00| 03.06.2012 23:59:59| 10    
04.06.2012 0:00:00| 05.06.2012 23:59:59| 20    
08.06.2012 0:00:00| 09.06.2012 23:59:59| 20    
10.06.2012 0:00:00| 15.06.2012 23:59:59| 30    
16.06.2012 0:00:00| 16.06.2012 23:59:59| 40    
20.06.2012 0:00:00| 24.06.2012 23:59:59| 40    
25.06.2012 0:00:00| 29.06.2012 23:59:59| 50    

Решил таким запросом, подскажите, как его можно соптимизировать или получить результат более простым запросом.


ВЫБРАТЬ                                                  
 Т1.Дата КАК ДатаН,                                      
 МИНИМУМ(ДОБАВИТЬКДАТЕ(Т1_1.Дата, СЕКУНДА, -1)) КАК ДатаК,
 Т1.Значение                                            
ПОМЕСТИТЬ ВТ                                              
ИЗ                                                        
 Т1 КАК Т1                                              
 ВНУТРЕННЕЕ СОЕДИНЕНИЕ Т1 КАК Т1_1                      
   ПО (Т1_1.Дата > Т1.Дата)                          
СГРУППИРОВАТЬ ПО                                          
 Т1.Дата,                                                
 Т1.Значение                                            
ОБЪЕДИНИТЬ ВСЕ                                            
ВЫБРАТЬ                                                  
 Т1.Дата,                                                
 КОНЕЦПЕРИОДА(Т1.Дата, МЕСЯЦ),                          
 Т1.Значение                                            
ИЗ                                                        
 Т1 КАК Т1                                              
ГДЕ                                                      
 Т1.Дата В                                              
   (ВЫБРАТЬ                                          
         МАКСИМУМ(Т1.Дата) ИЗ Т1)                        
;                                                        
                                                         
///////////////////////////////                          
ВЫБРАТЬ                                                  
 ВЫБОР                                                  
   КОГДА ВТ.ДатаН < Т2.НачалоПериода                    
     ТОГДА Т2.НачалоПериода                              
   ИНАЧЕ ВТ.ДатаН                                        
     КОНЕЦ КАК НачалоПериода,                            
 ВЫБОР                                                  
   КОГДА ВТ.ДатаК > Т2.КонецПериода                      
     ТОГДА Т2.КонецПериода                              
   ИНАЧЕ ВТ.ДатаК                                        
 КОНЕЦ КАК КонецПериода,                                
 ВТ.Значение                                            
ИЗ                                                        
 ВТ КАК ВТ                                              
   ВНУТРЕННЕЕ СОЕДИНЕНИЕ Т2 КАК Т2                  
    ПО (ВЫБОР                                        
       КОГДА ВТ.ДатаН < Т2.НачалоПериода        
         ТОГДА Т2.НачалоПериода                  
       ИНАЧЕ ВТ.ДатаН                            
       КОНЕЦ < ВЫБОР                            
             КОГДА ВТ.ДатаК > Т2.КонецПериода
               ТОГДА Т2.КонецПериода        
             ИНАЧЕ ВТ.ДатаК                  
            КОНЕЦ)                          
УПОРЯДОЧИТЬ ПО НачалоПериода
1 Genayo
 
10.07.12
13:55
Граждане, ну помогите кто чем может...