Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Выборка Min и Max  [new]
NightSkif
Member

Откуда:
Сообщений: 98
Доброе время суток всем. Server SQL 2005. Необходимо найти максимальное и минимальное значения в таблице операций по счетчикам за определенный период. Есть несколько ньюансов:
1. значения минимума и максимума могут повторяться в течении одного периода.
2. необходимо отследить переход через 0, и соответственно надо вывести значение при перехде через ноль (т.е. если за период предпоследнее значение 9999, а последнее 100, необходимо вывести 100).
Первую задачу решаю так:
 DECLARE @N_Month1 VARCHAR(10) --Начальная дата
DECLARE @N_Month2 VARCHAR(10) --Конечная дата
SET @N_Month1='20090925'
SET @N_Month2='20091025' 

SELECT omin.Min_Pr, omin.D_Date, omin.P_Link,oMax.Max_Tek, oMax.D_Date 
	FROM	
	(SELECT o2min.Min_Pr, o.D_Date, o2min.P_Link 
	 FROM tbl_Operation AS o
		INNER JOIN
			(SELECT MIN(o_min.Pred) AS [Min_Pr]
				   ,o_min.P_Link
				   FROM tbl_Operation o_min
				   WHERE o_min.D_Date BETWEEN cast(@N_Month1 AS DATETIME) AND cast(@N_Month2 AS DATETIME)
						 AND o_min.OpType IN (0, 39)	--Вид операции
						 AND o_min.Perehod=0			--Переход через 0 (bit-ое поле)
                   GROUP BY o_min.P_Link		           
			) AS o2min
			ON o2min.P_Link = o.P_Link AND o.Pred=o2min.Min_Pr
	 WHERE o.OpType IN (0, 39)							--Вид операции
			AND o.Perehod=0								--Переход через 0 (bit-ое поле)
	  ) oMin
		INNER JOIN
			(SELECT o2max.Max_Tek, o.D_Date, o2max.P_Link
			 FROM tbl_Operation AS o
				INNER JOIN(
					SELECT MAX(o_max.Tek) AS [Max_Tek]
					       ,o_max.P_Link
							FROM tbl_Operation o_max					        
					        WHERE o_max.D_Date BETWEEN cast(@N_Month1 AS DATETIME)	AND cast(@N_Month2 AS DATETIME)
								  AND o_max.OpType IN (0, 39)	--Вид операции
								  AND o_max.Perehod=0			--Переход через 0 (bit-ое поле)
					       GROUP BY o_max.P_Link
							) AS o2max
					ON o2max.P_Link = o.P_Link AND o.Tek=o2max.Max_Tek
					WHERE o.OpType IN (0, 39)					--Вид операции
							AND o.Perehod=0						--Переход через 0 (bit-ое поле)
		) oMax
	ON oMax.P_Link = oMin.P_Link		
ORDER BY oMin.P_Link 
Как решить вторую, я не знаю. Помогите с запросом
16 ноя 09, 06:53    [7931721]     Ответить | Цитировать Сообщить модератору
 Re: Выборка Min и Max  [new]
Добрый Э - Эх
Guest
Чем постить запрос, лучше бы привел скрипты по созданию тестового набора данных и желаемый вид результата на этих тестовых данных...
16 ноя 09, 07:08    [7931730]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить