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

Откуда:
Сообщений: 42
Добрый день!
Есть таблица: код вагона, станция дислокации, станция назначения, дата операции... даже проще: код, станция дислокации, дата операции вида:
CODE Station Date
10 станцияА время3
10 станцияА время2
10 станцияА время1 (первая операция на станции А, их-то и нужно получить для каждого вагона)
10 станцияБ время4
10 станцияБ время3
10 станцияБ время2
10 станцияБ время1 -нужно получить
......
20 станцияВ время2
20 станцияВ время1 -нужно получить
20 станцияВ время3
20 станцияВ время2
20 станцияВ время1 -нужно получить
Нужно для всех вагонов получить запись с первой операцией на станции, т.е:

CODE Station Date
10 станцияА время1
10 станцияБ время1
20 станцияВ время1
20 станцияВ время1

пробовал варианты от сюда [url=]https://www.sql.ru/forum/690899/kak-vybrat-maksimalnoe-znachenie-iz-3-poley[/url] доработать все варианты, но получается выборка вида:

CODE Station Date
10 станцияА время3
10 станцияБ время4
20 станцияВ время2
20 станцияВ время3
т.е. выбираются последние операции на станции, а не первые.

финальный скрипт, напрмер, такой:

select top 1 with ties * from
(
select CO.CarNumber, CO.CodeStation, CO.CodeDestStation, CO.DateOper, StatName.Name
from [iasRusAgrTr].[dbo].[CarOperationHistory] as CO 
inner join qStation as StatName on CO.CodeStation = StatName.Code
where  CO.CodeStation =  CO.CodeDestStation
and  CO.CarNumber in (select CarNumber
						from [iasRusAgrTr].dbo.CarBase
						where CarBase.OnTracking=1)
) t --это для формирования исходной выборки , а-ля "CODE" "Station" "Date",
order by ROW_NUMBER()
Over(partition by t.CarNumber
	order by t.DateOper desc)


Объясните пожалуйста, как сделать верную выборку.
Спасибо!
28 ноя 13, 12:16    [15204807]     Ответить | Цитировать Сообщить модератору
 Re: выбор максимальных значений - твориться какое-то безобразие!  [new]
rockot616
Member

Откуда:
Сообщений: 42
Да, в шапке с названием накосячил...минимальное значение нужно.
28 ноя 13, 12:24    [15204917]     Ответить | Цитировать Сообщить модератору
 Re: выбор максимальных значений - твориться какое-то безобразие!  [new]
aleks2
Guest
order by ROW_NUMBER()
Over(partition by t.CarNumber
	order by t.DateOper ASC)
28 ноя 13, 12:41    [15205116]     Ответить | Цитировать Сообщить модератору
 Re: выбор максимальных значений - твориться какое-то безобразие!  [new]
rockot616
Member

Откуда:
Сообщений: 42
aleks2
order by ROW_NUMBER()
Over(partition by t.CarNumber
	order by t.DateOper ASC)


Так пробовал - выдается выборка вида:

10 станцияБ время1
20 станцияВ время1

т.е. выбираются самые ранние операции, по одной для каждого вагона за всю историю. А нужно - ранние операции в пределах одной станции.
28 ноя 13, 13:17    [15205520]     Ответить | Цитировать Сообщить модератору
 Re: выбор максимальных значений - твориться какое-то безобразие!  [new]
Glory
Member

Откуда:
Сообщений: 104751
rockot616
т.е. выбираются самые ранние операции, по одной для каждого вагона за всю историю. А нужно - ранние операции в пределах одной станции.

Тогда почему partition по t.CarNumber, а не по станции ?
28 ноя 13, 13:19    [15205537]     Ответить | Цитировать Сообщить модератору
 Re: выбор максимальных значений - твориться какое-то безобразие!  [new]
rockot616
Member

Откуда:
Сообщений: 42
Хм....а ведь и правда....Спасибо, сейчас попробую. Т.е., если я правильно понял мысль, нужно типа того:

order by ROW_NUMBER()
Over(partition by t.CodeStation
	order by t.DateOper desc)
28 ноя 13, 13:25    [15205594]     Ответить | Цитировать Сообщить модератору
 Re: выбор максимальных значений - твориться какое-то безобразие!  [new]
rockot616
Member

Откуда:
Сообщений: 42
Да, так более правильно, но значения все равно выбираются типа таких:
10 станцияА время3
10 станцияБ время4
и т.д.

select top 1 with ties * from
(
select CO.CarNumber, CO.CodeStation, CO.CodeDestStation, CO.DateOper, StatName.Name
from [iasRusAgrTr].[dbo].[CarOperationHistory] as CO 
inner join qStation as StatName on CO.CodeStation = StatName.Code
where  CO.CodeStation =  CO.CodeDestStation
and  CO.CarNumber in (select CarNumber
						from [iasRusAgrTr].dbo.CarBase
						where CarBase.OnTracking=1)
and CO.CarNumber = 40093510
) t
order by ROW_NUMBER()
Over(partition by t.CodeStation
	order by t.DateOper desc)


Результат:

40093510 2050 2050 2013-11-26 03:29:00.000 Советский - а это Последнняя операция, так же как и все ниже следующие
40093510 2600 2600 2013-10-04 23:05:00.000 Лоймола
40093510 2590 2590 2013-08-10 17:44:00.000 Пийтсиеки
40093510 2610 2610 2013-08-06 15:26:00.000 Райконкоски
40093510 2630 2630 2013-11-19 22:25:00.000 Суоярви II
28 ноя 13, 13:37    [15205695]     Ответить | Цитировать Сообщить модератору
 Re: выбор максимальных значений - твориться какое-то безобразие!  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
rockot616,

Вам же написали: order by t.DateOper descASC
28 ноя 13, 13:58    [15205896]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить