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

Откуда:
Сообщений: 733
Народ,
MS SQL 2000
Не приходит в голову как мене выбрать из таблицы по 3 записи каждого наименования товара с ценой закупки упорядоченных по дате:
ID_Item, Data, Price

1 21.09.2018 1000
2 11.09.2018 1100
2 13.09.2018 1200
2 15.09.2018 1300
1 16.09.2018 1400
1 12.09.2018 1500
1 14.08.2018 1600
1 16.09.2018 1700
1 17.08.2018 1800
2 05.08.2018 1900
3 07.09.2018 2000
2 09.08.2018 2100
3 15.07.2018 2200
3 18.08.2018 2300
3 03.09.2018 2400
Результат:
1 12.09.2018 1500
1 14.08.2018 1600
1 16.09.2018 1700
2 05.08.2018 1900
2 09.08.2018 2100
2 11.09.2018 1100
3 03.09.2018 2400
3 07.09.2018 2000
3 15.07.2018 2200
Всем спасибо
27 сен 18, 10:41    [21687836]     Ответить | Цитировать Сообщить модератору
 Re: Выборка  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6794
Valerii,
SET DATEFORMAT DMY;
DECLARE @a TABLE (ID_Item int, Data date, Price int)
INSERT INTO @a VALUES
(1, '21-09-2018', 1000),
(2, '11-09-2018', 1100), 
(2, '13-09-2018', 1200),
(2, '15-09-2018', 1300),
(1, '16-09-2018', 1400),
(1, '12-09-2018', 1500),
(1, '14-08-2018', 1600),
(1, '16-09-2018', 1700),
(1, '17-08-2018', 1800),
(2, '05-08-2018', 1900),
(3, '07-09-2018', 2000),
(2, '09-08-2018', 2100),
(3, '15-07-2018', 2200),
(3, '18-08-2018', 2300),
(3, '03-09-2018', 2400)


SELECT  
	ID_Item,
	Data,
	Price
FROM 
(
	SELECT 
		ID_Item,
		Data,
		Price,
		[r] = (SELECT count (id_Item) FROM @a b WHERE b.Data < a.Data AND b.id_Item = a.id_Item)
	FROM @a a
) as c
WHERE 
	r < 3
ORDER BY 
	id_Item,
	Data
27 сен 18, 10:49    [21687856]     Ответить | Цитировать Сообщить модератору
 Re: Выборка  [new]
Valerii
Member

Откуда:
Сообщений: 733
Valerii
Народ,
MS SQL 2000
Не приходит в голову как мене выбрать из таблицы по 3 записи каждого наименования товара с ценой закупки упорядоченных по дате:
ID_Item, Data, Price

1 21.09.2018 1000
2 11.09.2018 1100
2 13.09.2018 1200
2 15.09.2018 1300
1 16.09.2018 1400
1 12.09.2018 1500
1 14.08.2018 1600
1 16.09.2018 1700
1 17.08.2018 1800
2 05.08.2018 1900
3 07.09.2018 2000
2 09.08.2018 2100
3 15.07.2018 2200
3 18.08.2018 2300
3 03.09.2018 2400


Результат:
1 14.08.2018 1600
1 12.09.2018 1500
1 16.09.2018 1700
2 05.08.2018 1900
2 09.08.2018 2100
2 11.09.2018 1100
3 15.07.2018 2200
3 03.09.2018 2400
3 07.09.2018 2000
Всем спасибо
27 сен 18, 10:49    [21687859]     Ответить | Цитировать Сообщить модератору
 Re: Выборка  [new]
Kopelly
Member

Откуда: Красноярск
Сообщений: 289
Valerii,

Select top 1 with ties * 
.....
Order by (row_number() over (partitoin by товар Order by дата desc) - 1)/3
27 сен 18, 10:49    [21687860]     Ответить | Цитировать Сообщить модератору
 Re: Выборка  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6794
Kopelly
Valerii,

Select top 1 with ties * 
.....
Order by (row_number() over (partitoin by товар Order by дата desc) - 1)/3

оба на 2к не работают
27 сен 18, 10:53    [21687869]     Ответить | Цитировать Сообщить модератору
 Re: Выборка  [new]
982183
Member

Откуда: VL
Сообщений: 3349
Valerii
.....упорядоченных по дате:

ID_Item, Data, Price
1 21.09.2018 1000
1 16.09.2018 1400
1 12.09.2018 1500
1 14.08.2018 1600
1 16.09.2018 1700
1 17.08.2018 1800
Результат:
1 12.09.2018 1500
1 14.08.2018 1600
1 16.09.2018 1700


Не вижу упорядочивания по дате в контрольном примере/результате.
27 сен 18, 10:58    [21687878]     Ответить | Цитировать Сообщить модератору
 Re: Выборка  [new]
Valerii
Member

Откуда:
Сообщений: 733
TaPaK,

Супер.. спасибо.
27 сен 18, 11:01    [21687888]     Ответить | Цитировать Сообщить модератору
 Re: Выборка  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6794
982183
Valerii
.....упорядоченных по дате:

ID_Item, Data, Price
1 21.09.2018 1000
1 16.09.2018 1400
1 12.09.2018 1500
1 14.08.2018 1600
1 16.09.2018 1700
1 17.08.2018 1800
Результат:
1 12.09.2018 1500
1 14.08.2018 1600
1 16.09.2018 1700

Не вижу упорядочивания по дате в контрольном примере/результате.

не вижу умения читать тз
27 сен 18, 11:05    [21687895]     Ответить | Цитировать Сообщить модератору
 Re: Выборка  [new]
Valerii
Member

Откуда:
Сообщений: 733
TaPaK
982183
пропущено...

Не вижу упорядочивания по дате в контрольном примере/результате.

не вижу умения читать тз


опечатака
27 сен 18, 11:16    [21687930]     Ответить | Цитировать Сообщить модератору
 Re: Выборка  [new]
982183
Member

Откуда: VL
Сообщений: 3349
TaPaK
не вижу умения читать тз

Ну так хотя бы указал по возрастанию и ли убыванию.
27 сен 18, 11:21    [21687938]     Ответить | Цитировать Сообщить модератору
 Re: Выборка  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6794
982183
TaPaK
не вижу умения читать тз

Ну так хотя бы указал по возрастанию и ли убыванию.

только для вас это важно
27 сен 18, 11:25    [21687945]     Ответить | Цитировать Сообщить модератору
 Re: Выборка  [new]
aleks222
Member

Откуда:
Сообщений: 847
TaPaK
Valerii,
SET DATEFORMAT DMY;
DECLARE @a TABLE (ID_Item int, Data date, Price int)
INSERT INTO @a VALUES
(1, '21-09-2018', 1000),
(2, '11-09-2018', 1100), 
(2, '13-09-2018', 1200),
(2, '15-09-2018', 1300),
(1, '16-09-2018', 1400),
(1, '12-09-2018', 1500),
(1, '14-08-2018', 1600),
(1, '16-09-2018', 1700),
(1, '17-08-2018', 1800),
(2, '05-08-2018', 1900),
(3, '07-09-2018', 2000),
(2, '09-08-2018', 2100),
(3, '15-07-2018', 2200),
(3, '18-08-2018', 2300),
(3, '03-09-2018', 2400)


SELECT  
	ID_Item,
	Data,
	Price
FROM 
(
	SELECT 
		ID_Item,
		Data,
		Price,
		[r] = (SELECT count (id_Item) FROM @a b WHERE b.Data < a.Data AND b.id_Item = a.id_Item)
	FROM @a a
) as c
WHERE 
	r < 3
ORDER BY 
	id_Item,
	Data


Садись, неуд.

-- Лучше иметь уникальный идентификатор строки...
SELECT  
	ID_Item,
	Data,
	Price
FROM @a as t
  where data in ( select top(3) Data from @a as a where a.id_Item = t.id_Item order by Data asc )
ORDER BY id_Item, Data;
27 сен 18, 11:33    [21687957]     Ответить | Цитировать Сообщить модератору
 Re: Выборка  [new]
Valerii
Member

Откуда:
Сообщений: 733
aleks222,

Line 6: Incorrect syntax near '('
27 сен 18, 12:07    [21688000]     Ответить | Цитировать Сообщить модератору
 Re: Выборка  [new]
Valerii
Member

Откуда:
Сообщений: 733
Valerii,

TOP 3
27 сен 18, 12:08    [21688002]     Ответить | Цитировать Сообщить модератору
 Re: Выборка  [new]
Valerii
Member

Откуда:
Сообщений: 733
Valerii,

Но первый пример лучше, так как в нем ожно параметризировать количество записей каждого товара. В вашем случае насколько я нарывался на проблемы я не могу параметризировать выражение ТОР @InvoiceRecord
27 сен 18, 12:11    [21688005]     Ответить | Цитировать Сообщить модератору
 Re: Выборка  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6794
Valerii
Valerii,

Но первый пример лучше, так как в нем ожно параметризировать количество записей каждого товара. В вашем случае насколько я нарывался на проблемы я не могу параметризировать выражение ТОР @InvoiceRecord

не помню как в 2000 но вообще
TOP (SELECT @InvoiceRecord)
27 сен 18, 12:12    [21688007]     Ответить | Цитировать Сообщить модератору
 Re: Выборка  [new]
iap
Member

Откуда: Москва
Сообщений: 46951
TaPaK
Valerii
Valerii,

Но первый пример лучше, так как в нем ожно параметризировать количество записей каждого товара. В вашем случае насколько я нарывался на проблемы я не могу параметризировать выражение ТОР @InvoiceRecord

не помню как в 2000 но вообще
TOP (SELECT @InvoiceRecord)
Скобки в TOP появились в SQL2005
27 сен 18, 16:16    [21688338]     Ответить | Цитировать Сообщить модератору
 Re: Выборка  [new]
256k
Member

Откуда: с.Торчилово, Псковская обл.
Сообщений: 437
TaPaK
Kopelly
Valerii,

Select top 1 with ties * 
.....
Order by (row_number() over (partitoin by товар Order by дата desc) - 1)/3

оба на 2к не работают


Это будет работать на 2000?
DECLARE @a TABLE (ID_Item int, Data date, Price int)
INSERT INTO @a VALUES
(1, '21-09-2018', 1000),
(2, '11-09-2018', 1100),
27 сен 18, 16:20    [21688346]     Ответить | Цитировать Сообщить модератору
 Re: Выборка  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6794
256k
TaPaK
пропущено...

оба на 2к не работают


Это будет работать на 2000?
DECLARE @a TABLE (ID_Item int, Data date, Price int)
INSERT INTO @a VALUES
(1, '21-09-2018', 1000),
(2, '11-09-2018', 1100),

какой щепетильный малый, таблица у страдальца своя на кой чёрт ему моя?
27 сен 18, 16:23    [21688347]     Ответить | Цитировать Сообщить модератору
 Re: Выборка  [new]
iap
Member

Откуда: Москва
Сообщений: 46951
256k
TaPaK
пропущено...

оба на 2к не работают


Это будет работать на 2000?
DECLARE @a TABLE (ID_Item int, Data date, Price int)
INSERT INTO @a VALUES
(1, '21-09-2018', 1000),
(2, '11-09-2018', 1100),
Нет. Но это всего лишь создание табличной переменной с заполнением.
Что мешает вместо VALUES(),() написать SELECT UNION ALL SELECT ?
27 сен 18, 16:23    [21688348]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить