Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
guest789
Guest |
добрый день. подскажите пожалуйста, можно ли как-то запросом получить запись из таблицы продаж, которая будет максимально близкой к последней дате месяца? в таблице продаж записи могут быть не каждый день, увы. т.е. если за сентябрь в таблице продаж есть записи за 01.09.2015, 05.09.2015, 18.09.2015 то вывестись должна запись за 18.09.2015. плюс, это надо делать еще и с учетом товара который был продан, такая запись может быть по каждому товару. код товара хранится в таблице sales в поле product_id. т.е. итоговая запись должна выглядеть следующим образом: последняя дата месяца, максимально близкая дата, товар на максимально близкую дату, сумма на максимально близкую дату 30.09.2015, 18.09.2015, 165, 3000 CREATE TABLE Sales( [ID] [bigint] IDENTITY(1,1) NOT NULL, [Product] [bigint] NOT NULL, [Sales_Date] [date] null, [Sales_amount] [money] NULL ) в принципе есть еще таблица с датами, не знаю насколько она может быть полезной, в ней просто 1 поле в котором хранится дата на каждый день. спасибо |
16 дек 15, 19:24 [18569712] Ответить | Цитировать Сообщить модератору |
a_voronin Member Откуда: Москва Сообщений: 4805 |
guest789,DECLARE @T TABLE ( [Product] CHAR(1) NOT NULL, [Sales_Date] [date] null, [Sales_amount] [money] NULL ) INSERT INTO @T VALUES('A', '2015-01-01', 1) INSERT INTO @T VALUES('A', '2015-01-05', 2) INSERT INTO @T VALUES('A', '2015-01-08', 3) INSERT INTO @T VALUES('A', '2015-01-09', 4) INSERT INTO @T VALUES('A', '2015-01-29', 5) INSERT INTO @T VALUES('A', '2015-02-01', 6) INSERT INTO @T VALUES('A', '2015-02-05', 7) INSERT INTO @T VALUES('A', '2015-02-08', 8) INSERT INTO @T VALUES('A', '2015-02-09', 9) INSERT INTO @T VALUES('A', '2015-02-23', 0) INSERT INTO @T VALUES('B', '2015-01-01', 1) INSERT INTO @T VALUES('B', '2015-01-05', 2) INSERT INTO @T VALUES('B', '2015-01-08', 3) INSERT INTO @T VALUES('B', '2015-01-09', 4) INSERT INTO @T VALUES('B', '2015-01-30', 5) INSERT INTO @T VALUES('B', '2015-02-01', 6) INSERT INTO @T VALUES('B', '2015-02-05', 7) INSERT INTO @T VALUES('B', '2015-02-08', 8) INSERT INTO @T VALUES('B', '2015-02-09', 9) INSERT INTO @T VALUES('B', '2015-02-26', 0) SELECT TOP 1 WITH TIES * FROM @T ORDER BY ROW_NUMBER() OVER (PARTITION BY [Product], DatePart(year, [Sales_Date]), DatePart(month, [Sales_Date]) ORDER BY [Sales_Date] DESC ) |
16 дек 15, 20:01 [18569860] Ответить | Цитировать Сообщить модератору |
3unknown Member Откуда: New York Сообщений: 140 |
|
||
16 дек 15, 20:18 [18569936] Ответить | Цитировать Сообщить модератору |
3unknown Member Откуда: New York Сообщений: 140 |
DECLARE @T TABLE ( [Product] CHAR(1) NOT NULL, [Sales_Date] [date] null, [Sales_amount] [money] NULL ) INSERT INTO @T VALUES('A', '2015-01-01', 1) INSERT INTO @T VALUES('A', '2015-01-05', 2) INSERT INTO @T VALUES('A', '2015-01-08', 3) INSERT INTO @T VALUES('A', '2015-01-09', 4) INSERT INTO @T VALUES('A', '2015-01-29', 5) INSERT INTO @T VALUES('A', '2015-02-01', 6) INSERT INTO @T VALUES('A', '2015-02-05', 7) INSERT INTO @T VALUES('A', '2015-02-08', 8) INSERT INTO @T VALUES('A', '2015-02-09', 9) INSERT INTO @T VALUES('A', '2015-02-23', 0) INSERT INTO @T VALUES('B', '2015-01-01', 1) INSERT INTO @T VALUES('B', '2015-01-05', 2) INSERT INTO @T VALUES('B', '2015-01-08', 3) INSERT INTO @T VALUES('B', '2015-01-09', 4) INSERT INTO @T VALUES('B', '2015-01-30', 5) INSERT INTO @T VALUES('B', '2015-02-01', 6) INSERT INTO @T VALUES('B', '2015-02-05', 7) INSERT INTO @T VALUES('B', '2015-02-08', 8) INSERT INTO @T VALUES('B', '2015-02-09', 9) INSERT INTO @T VALUES('B', '2015-02-26', 0) select t.product,t.Sales_Date,t.Sales_amount from @t t join( select product,max(sales_date) as t_date from @T group by Product,year(sales_date),month(sales_date) ) a on t.Product = a.Product and t.Sales_Date = a.t_date order by t.product,t.Sales_Date |
16 дек 15, 20:27 [18569998] Ответить | Цитировать Сообщить модератору |
guest789
Guest |
все работает, всем спасибо ) |
16 дек 15, 22:34 [18570499] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |