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

Откуда:
Сообщений: 53
Помогите дописать запрос.
есть таблица
Код |Количество коробок |Дата
нужно вывести сумму коробок по каждому коду на ближайшую текущую дату
Остановился на суммировании по датам. Как сделать что бы выдавало не все даты а на минимальную дату?
SELECT        TOP 100 PERCENT MCode, SUM(QTY_Cases) AS Cases, CAST(REPLACE(CONVERT(varchar(12), RFSDateCalc1, 120), '-', '') + ':00:00' AS datetime) AS Date
FROM            dbo.vw_xls_InTransitCurrently AS TC
GROUP BY MCode, RFSDateCalc1
HAVING        (MCode = 21135932)
ORDER BY RFSDateCalc1

скрин итога приложил

К сообщению приложен файл. Размер - 16Kb
4 мар 14, 16:31    [15670985]     Ответить | Цитировать Сообщить модератору
 Re: Значения на минимальную дату  [new]
Яковец Сергей
Member

Откуда:
Сообщений: 53
Вроде получилось, но оооочень долго обрабатывается запрос
SELECT        MCode, SUM(QTY_Cases) AS Cases, CAST(REPLACE(CONVERT(varchar(12), RFSDateCalc1, 120), '-', '') + ':00:00' AS datetime) AS Date
FROM            dbo.vw_xls_InTransitCurrently AS TC1
GROUP BY MCode, RFSDateCalc1
HAVING        (RFSDateCalc1 =
                             (SELECT        MIN(RFSDateCalc1) AS Expr1
                               FROM            dbo.vw_xls_InTransitCurrently AS TC2
                               WHERE        (TC1.MCode = MCode)))
ORDER BY RFSDateCalc1

у кого есть предположения как можно его упростить для быстродействия?
4 мар 14, 17:50    [15671643]     Ответить | Цитировать Сообщить модератору
 Re: Значения на минимальную дату  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 21249
Эммм... написать в правильном форуме? тут всё-таки MySQL, а не MS SQL...
Но по духу вопроса - воспользуйтесь оконными функциями.
4 мар 14, 17:59    [15671691]     Ответить | Цитировать Сообщить модератору
 Re: Значения на минимальную дату  [new]
Яковец Сергей
Member

Откуда:
Сообщений: 53
Эмм, поспешил я. Запрос работает только если добавляю еще в условие определенный MCode
если на всю таблицу (в ней записей не так уж и много, около 1000) то SQL выдает ошибку типа:

Модератор: Тема перенесена из форума "MySQL".


К сообщению приложен файл. Размер - 40Kb


Сообщение было отредактировано: 4 мар 14, 18:35
4 мар 14, 18:05    [15671745]     Ответить | Цитировать Сообщить модератору
 Re: Значения на минимальную дату  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8828
Используйте

select top 1 with ties ....
from ...
order by row_number() over (partition by id order by my_date desc)


если я правильно вопрос понял.
4 мар 14, 18:45    [15672011]     Ответить | Цитировать Сообщить модератору
 Re: Значения на минимальную дату  [new]
aleks2
Guest
SELECT MCode, SUM(QTY_Cases) AS Cases, CAST(REPLACE(CONVERT(varchar(12), RFSDateCalc1, 120), '-', '') + ':00:00' AS datetime) AS Date
FROM dbo.vw_xls_InTransitCurrently AS TC1 
     right outer join 
     (SELECT MCode, MIN(RFSDateCalc1) AS RFSDateCalc1
         FROM dbo.vw_xls_InTransitCurrently
         GROUP BY MCode
     ) X on X.MCode = TC1.MCode and X.RFSDateCalc1 = TC1.RFSDateCalc1
GROUP BY MCode, RFSDateCalc1
ORDER BY RFSDateCalc1

-- Ну и vw_xls_InTransitCurrently, нибось View из дюжины соединений?
4 мар 14, 19:06    [15672172]     Ответить | Цитировать Сообщить модератору
 Re: Значения на минимальную дату  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8828
Зачем такой сложный cast? Какой тип поля RFSDateCalc1?
4 мар 14, 19:37    [15672292]     Ответить | Цитировать Сообщить модератору
 Re: Значения на минимальную дату  [new]
Яковец Сергей
Member

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

ну она да,
соединений в ней 2, и те что к ней соединяются, тоже каждая по несколько имеет.
с вашим запросом аналогичная ошибка
5 мар 14, 11:25    [15675113]     Ответить | Цитировать Сообщить модератору
 Re: Значения на минимальную дату  [new]
Яковец Сергей
Member

Откуда:
Сообщений: 53
Владислав Колосов,
тип данных datetime
просто нужно не учитывать время а только день
5 мар 14, 11:33    [15675214]     Ответить | Цитировать Сообщить модератору
 Re: Значения на минимальную дату  [new]
Яковец Сергей
Member

Откуда:
Сообщений: 53
aleks2,
в общем заменил
FROM dbo.vw_xls_InTransitCurrently AS TC1 
на источник-таблицу всех этих вьюх и заработало
FROM dbo.vТаблица-источник AS TC1 

Спасибо огромное за помощ
5 мар 14, 11:54    [15675480]     Ответить | Цитировать Сообщить модератору
 Re: Значения на минимальную дату  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8828
Яковец Сергей
Владислав Колосов,
тип данных datetime
просто нужно не учитывать время а только день


Если с точностью до дня, то преобразование выполняется неверно - остается отрезанная старшая цифра часа, которая превращается в 0,1 или 2 часа.
Попробуйте:
select cast(convert(char(8), RFSDateCalc1, 112) as datetime)
-- или
select cast(cast(RFSDateCalc1 as date) as datetime)
5 мар 14, 14:48    [15677241]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить