2016-10-19 3 views
-1

я следующие данные (SQL Server 2014):значение колонки для минимального и максимального даты

  Event  Start    End Pres_Avg Pres_Min Pres_Max Pres_Start Pres_End 
11-PSV-401002A 4-4-16 12:51 4-4-16 13:58 6.07990537 6.05642176 6.10893869 6.07731962 6.05642176 
11-PSV-401002A 4-4-16 14:04 4-4-16 14:29 6.09301376 6.0584569 6.13351011 6.06586695 6.0584569 
11-PSV-401002A 4-4-16 14:38 4-4-16 15:09 6.10506467 6.05952168 6.12660933 6.06916332 6.05952168 

И я использую следующий запрос, чтобы получить среднее значение для Pres_Avg и мин и макс для Pres_Min и Pres_Max:

select [Event], 
    min([Start ]) [Start ], 
    max([End ]) [End ], 
    avg([Pres_Avg]) [Pres_Avg], 
    Min([Pres_Min]) [Pres_Min], 
    Max([Pres_Max]) [Pres_Max] 
from y 
group by [Event], g 

Я хотел бы получить Pres_Start, где Pres_Start для min ([Start]) = 6.07731962 и Pres_End, где Pres_End для max ([End]) = 6.05952168. Как я могу сделать это в том же запросе?

  Event  Start    End Pres_Avg Pres_Min Pres_Max Pres_Start Pres_End 
11-PSV-401002A 4-4-16 12:51 4-4-16 15:09 6.092661 6.05642176 6.13351011 6.07731962 6.05952168 

Я хотел бы что-то вроде кода ниже в одном запросе, так как я уже получаю мин и даты начала:

select [Event], 
    min([Start ]) [Start ], 
    max([End ]) [End ], 
    avg([Pres_Avg]) [Pres_Avg], 
    Min([Pres_Min]) [Pres_Min], 
    Max([Pres_Max]) [Pres_Max], 
    min([Start ]) and Pres_Start value, 
    max([End ]) and Pres_End value 
from y 
group by [Event], g 

благодарит

+0

Укажите свой ожидаемый результат в виде таблицы –

+0

@Clar Cleetus: см обновление –

ответ

1

Вам нужно будет присоединиться снова с табличного у дважды, чтобы получить строки с необходимыми начальными и конечными значениями. Вы можете сделать это, поставив свой запрос в подзапрос, а затем объединение с у дважды:

select y_grouped.* 
    , y_start.Pres_Start 
    , y_end.Pre_End 
from (select [Event], 
      min([Start ]) [Start ], 
      max([End ]) [End ], 
      avg([Pres_Avg]) [Pres_Avg], 
      Min([Pres_Min]) [Pres_Min], 
      Max([Pres_Max]) [Pres_Max] 
     from y 
     group by [Event], g) y_grouped 
inner join y y_start on y_grouped.[Start ] = y_start.[Start ] 
inner join y y_end on y_grouped.[End ] = y_end.[End ] 

Это трудно быть абсолютно уверены, что это будет работать, не имея данные выборки, чтобы запустить его, но дать ей идти , и дайте нам знать, как это получается!

Также имейте в виду, что если у вас есть несколько строк с одинаковой начальной датой или той же датой окончания, вы можете получить несколько строк в этом запросе. Если это так, укажите, как вы можете выбрать между этими двумя строками, чтобы получить значения Pres_Start и Pres_End.

Для метода в одной строке, вы можете сделать следующее:

select [Event], 
    min([Start ]) [Start ], 
    max([End ]) [End ], 
    avg([Pres_Avg]) [Pres_Avg], 
    Min([Pres_Min]) [Pres_Min], 
    Max([Pres_Max]) [Pres_Max], 
    (select top 1 Pres_Start from @y y2 where y1.[Event] = y2.event and y1.g = y2.g order by [Start ] asc) Pres_Start, 
    (select top 1 Pres_End from @y y2 where y1.[Event] = y2.event and y1.g = y2.g order by [End ] desc) Pres_End 
from @y as y1 
group by [Event], g 
+0

спасибо за код. Я просто подумал, что есть некоторый эффективный способ войти в одну строку кода, так как я уже получаю минимальные и максимальные даты, поэтому просто принимать значения идут с этими минимальными и максимальными датами. Что-то вроде обновления из основного кода (будет помещено в минну). –

+0

возможно есть некоторая команда на SQL-сервере 2014 –

+0

спасибо за ответ !!! –

Смежные вопросы