powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / МИН МАХ отбор по дате
13 сообщений из 13, страница 1 из 1
МИН МАХ отбор по дате
    #39893009
orensymrak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго времени суток,

Помогите разобраться с некоторым запросом, а именно отбор по минимальной дате.

Такой вот запрос:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
SELECT 
T_Models.ModelID,
MIN(T_Headers.Tdate) as 'DataPrihoda', 
T_Transactions.CostBase
FROM                 T_Headers left JOIN
                         T_Transactions ON T_Headers.ID = T_Transactions.ID_Headers left JOIN
                         T_PLU ON T_Transactions.ID_PLU = T_PLU.ID left JOIN
                         T_Models ON T_PLU.ID_Models = T_Models.ID left JOIN
			 T_Objects on T_Objects.ID = T_Headers.ID_ObjectsContr
where T_Models.ModelID ='R_MV858_108_588/010' 
and T_Headers.ID_Moves = 2  
and T_Headers.ID_Objects = 34  
and T_Headers.ID_ObjectsContr = 42638 
group by T_Models.ModelID,T_Transactions.CostBase


В итоге получается:

Код: html
1.
2.
3.
4.
5.
R_MV858_108_588/010	2019-09-24 00:00:00	3172.20
R_MV858_108_588/010	2019-09-24 00:00:00	3172.50
R_MV858_108_588/010	2019-08-09 00:00:00	5287.00
R_MV858_108_588/010	2019-06-18 00:00:00	5287.3333
R_MV858_108_588/010	2019-06-18 00:00:00	5287.50



И никак не могу добиться нужного результата.
По факту мне необходимо отобрать самую первую дату прихода и получить цену на эту дату
Код: html
1.
R_MV858_108_588/010	2019-06-18 00:00:00	5287.50


Правда есть подвох в этом случае на первую дату есть 2 цены, и какая правильная цена неизвестно. ибо в самой программе получена цена 5287.46666, я предположил что это средняя между этими цифрами.

Каким образом добиться нужного результата?
...
Рейтинг: 0 / 0
МИН МАХ отбор по дате
    #39893022
Фотография a_voronin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
оно?

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
SELECT TOP 1 WITH TIES 
T_Models.ModelID,
T_Headers.Tdate as [DataPrihoda] 
T_Transactions.CostBase
FROM T_Headers 
left JOIN T_Transactions ON T_Headers.ID = T_Transactions.ID_Headers 
left JOIN T_PLU ON T_Transactions.ID_PLU = T_PLU.ID 
left JOIN T_Models ON T_PLU.ID_Models = T_Models.ID 
left JOIN T_Objects on T_Objects.ID = T_Headers.ID_ObjectsContr
ORDER BY ROW_NUMBER() OVER (PARTITION BY T_Models.ModelID,T_Transactions.CostBase ORDER BY T_Headers.Tdate) 
...
Рейтинг: 0 / 0
МИН МАХ отбор по дате
    #39893032
orensymrak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: sql
1.
2.
3.
4.
5.
6.
7.
R_MV858_108_588/010	2019-06-18 00:00:00	13592.00
R_MV858_108_588/010	2019-09-24 00:00:00	15192.00
R_MV858_108_588/010	2019-09-24 00:00:00	3172.20
R_MV858_108_588/010	2019-09-24 00:00:00	3172.50
R_MV858_108_588/010	2019-08-09 00:00:00	5287.00
R_MV858_108_588/010	2019-06-18 00:00:00	5287.3333
R_MV858_108_588/010	2019-06-18 00:00:00	5287.50



Вообще еще больше дал строк) Если без условия то 212+тыс строк, а артикулов 113тыс
...
Рейтинг: 0 / 0
МИН МАХ отбор по дате
    #39893059
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
первую дату есть 2 цены, и какая правильная цена неизвестно



В таком случае задача не имеет решения.
...
Рейтинг: 0 / 0
МИН МАХ отбор по дате
    #39893123
Фотография a_voronin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
orensymrak,

уберите цену из PARTITION BY

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
SELECT TOP 1 WITH TIES 
T_Models.ModelID,
T_Headers.Tdate as [DataPrihoda] 
T_Transactions.CostBase
FROM T_Headers 
left JOIN T_Transactions ON T_Headers.ID = T_Transactions.ID_Headers 
left JOIN T_PLU ON T_Transactions.ID_PLU = T_PLU.ID 
left JOIN T_Models ON T_PLU.ID_Models = T_Models.ID 
left JOIN T_Objects on T_Objects.ID = T_Headers.ID_ObjectsContr
ORDER BY ROW_NUMBER() OVER (PARTITION BY T_Models.ModelID ORDER BY T_Headers.Tdate) 



При двух датах он выберет любую
...
Рейтинг: 0 / 0
МИН МАХ отбор по дате
    #39893775
orensymrak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
a_voronin,

Так смысл и заключается что взять цену на минимальную дату)) Если убрать цену тогда да группировка правильно сработает)
...
Рейтинг: 0 / 0
МИН МАХ отбор по дате
    #39893776
Фотография a_voronin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
orensymrak
a_voronin,

взять цену на минимальную дату))


цена стоит не в группировке

запустите запрос
...
Рейтинг: 0 / 0
МИН МАХ отбор по дате
    #39893784
orensymrak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
a_voronin,

Не правильно прочитал ваше сообщение)) в вашем варианте да взялась нужная дата, а цена взялась некорректная
...
Рейтинг: 0 / 0
МИН МАХ отбор по дате
    #39894445
orensymrak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Еще вопросик задам тут же, можно ли в заголовок столбца (имя) вставить дату, например у меня 8 столбцов = 8 неделям от текущей даты, каким образом в заголовок отобразить эти даты.
вида 2611-1911

getDate()-7
...
Рейтинг: 0 / 0
МИН МАХ отбор по дате
    #39894455
Фотография a_voronin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
orensymrak,

Вы в чем отображаете результаты? Если в репортинге, то это надо делать в матрице.

А вообще вам надо OLAP-кубы тогда делать, если вы хотите разворачивать данные по горизонтали.
...
Рейтинг: 0 / 0
МИН МАХ отбор по дате
    #39894477
orensymrak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
a_voronin,

Ну так то запросы готовлю в SSMS, чтобы потом готовый результат внедрить в Excel
...
Рейтинг: 0 / 0
МИН МАХ отбор по дате
    #39894803
Kopelly
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
Declare @sql varchar(4000),
@D_Beg as date = '20191101',
@D_End as date = '20191115';

With Per as (
Select @D_Beg as D
union all 
Select dateadd(d,1,D) from Per Where per.D<@D_End
)
Select @sql = cast('Select Consumer_ID' as varchar(max))+
      (Select ', sum(Case When D_Date = '''+convert(varchar(10),D,120)+''' then 1 End) as [Значение на '+convert(varchar(10),D,104)+']' From per for xml path(''))
	  
	  +' From Sales'
	  +' Where D_Date between '''+convert(varchar(10),@D_Beg,120)+''' and '''+convert(varchar(10),@D_End,120)+''' '
	  +' Group by Consumer_ID';

	print @sql
Exec (@sql);
...
Рейтинг: 0 / 0
МИН МАХ отбор по дате
    #39895178
Фотография a_voronin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kopelly
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
Declare @sql varchar(4000),
@D_Beg as date = '20191101',
@D_End as date = '20191115';

With Per as (
Select @D_Beg as D
union all 
Select dateadd(d,1,D) from Per Where per.D<@D_End
)
Select @sql = cast('Select Consumer_ID' as varchar(max))+
      (Select ', sum(Case When D_Date = '''+convert(varchar(10),D,120)+''' then 1 End) as [Значение на '+convert(varchar(10),D,104)+']' From per for xml path(''))
	  
	  +' From Sales'
	  +' Where D_Date between '''+convert(varchar(10),@D_Beg,120)+''' and '''+convert(varchar(10),@D_End,120)+''' '
	  +' Group by Consumer_ID';

	print @sql
Exec (@sql);



Вот, чтобы через подобную хитрозакрученную динамическую ж..., запросы не писать и были придуманы OLAP-кубы.

Там пишется

Код: sql
1.
2.
3.
4.
SELECT 
X ON ROWS, 
Y ON COLUMNS 
FROM CUBE 
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / МИН МАХ отбор по дате
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]