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

Откуда:
Сообщений: 79
Коллеги, помогите пожалуйста с запросом. Есть таблица: Id строки, номенклатура, количество, дата отгрузки. Пример: 1000, перец желтый, 12, 28.02.2015. В таблице много строк ~1000000. Нужно для каждой даты в столбце “дата отгрузки” добавить столбец “начало месяца” (для 28.02.2015 -> 01.02.2015; для 31.01.2015 -> 01.01.2015 и. т. д.), чтоб по дате начала месяца привязать цену к каждой позиции номенклатуры через LEFT OUTER JOIN
Конструкция, вроде SELECT CAST(CONVERT(VARCHAR(6), GETDATE(),112)+'01' AS DATETIME) выводит только одну дату, а мне нужна дата для каждой строки.
База mssql 2008 r2
7 апр 15, 17:27    [17484706]     Ответить | Цитировать Сообщить модератору
 Re: Дата начала месяца в mssql 2008r2  [new]
Konst_One
Member

Откуда:
Сообщений: 11600
SELECT CAST(CONVERT(VARCHAR(6), GETDATE(),112)+'01' AS DATETIME) 


ну так и чему вы удивляетесь?

берите первый день следующего месяца и из него вычитайте 1
7 апр 15, 17:31    [17484735]     Ответить | Цитировать Сообщить модератору
 Re: Дата начала месяца в mssql 2008r2  [new]
iap
Member

Откуда: Москва
Сообщений: 47085
Konst_One
SELECT CAST(CONVERT(VARCHAR(6), GETDATE(),112)+'01' AS DATETIME) 



ну так и чему вы удивляетесь?

берите первый день следующего месяца и из него вычитайте 1
А зачем?
Просто надо GETDATE() заменить на имя поля с датой...
И FROM не забыть написать
7 апр 15, 17:42    [17484776]     Ответить | Цитировать Сообщить модератору
 Re: Дата начала месяца в mssql 2008r2  [new]
ondorsal
Member

Откуда:
Сообщений: 79
Konst_One,
Спасибо за участие. Конструкцию SELECT CAST(CONVERT(VARCHAR(6), GETDATE(),112)+'01' AS DATETIME) увидел где-то на этом форуме. Я так понимаю вместо GETDATE() мне надо поставить что-то вроде SELECT dbo.tablename.дата отгрузки FROM dbo.tablename.
Приведите, пожалуйста, пример запроса, если не сложно.

P.S. Простите за мой английский)
7 апр 15, 17:42    [17484777]     Ответить | Цитировать Сообщить модератору
 Re: Дата начала месяца в mssql 2008r2  [new]
iap
Member

Откуда: Москва
Сообщений: 47085
Я в последнее время предпочитаю это:
DATEADD(MONTH,DATEDIFF(MONTH,0,GETDATE()),0)
7 апр 15, 17:44    [17484782]     Ответить | Цитировать Сообщить модератору
 Re: Дата начала месяца в mssql 2008r2  [new]
Сид
Member

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

вот изменят цену 15 (в общем, любого, просто не 1-го) числа, и будет "ой". Лучше уж через OUTER APPLY найти последнюю цену с датой <= даты отгрузки. А вообще, в зависимости от смысла этой таблицы, может имеет смысл цену туда в качестве денормализующией колонки добавить, обновить однократно и впредь туда вместе с ценой данные запихивать. Тогда и джоины не понадобятся.
7 апр 15, 17:45    [17484788]     Ответить | Цитировать Сообщить модератору
 Re: Дата начала месяца в mssql 2008r2  [new]
xenix
Guest
WITH CTE AS
(
  SELECT 'ПЕРЕЦ ЖЕЛТЫЙ'AS Nomenkl,'20150206' AS ShipDate,10 AS Cnt
  UNION ALL
  SELECT 'ПЕРЕЦ ЧЕРНЫЙ'AS Nomenkl,'20150318'AS ShipDate,20 AS Cnt
  UNION ALL
  SELECT 'ПЕРЕЦ МЕГАЖЕЛТЫЙ'AS Nomenkl,'20150118'AS ShipDate,100 AS Cnt
  
)

SELECT C.Nomenkl,C.ShipDate,C.Cnt,
CAST(CONVERT(VARCHAR(6),C.ShipDate,112)+'01' AS DATE)StartMonth 
FROM CTE C
7 апр 15, 17:50    [17484803]     Ответить | Цитировать Сообщить модератору
 Re: Дата начала месяца в mssql 2008r2  [new]
Konst_One
Member

Откуда:
Сообщений: 11600
похоже тут у ТС вечная проблема заполнения пустых данных датами из календаря.

ТС,
давайте свой запрос сюда, что вы там пытается получить. и желательно исходные данные и результат того, что хотите получить
7 апр 15, 17:50    [17484808]     Ответить | Цитировать Сообщить модератору
 Re: Дата начала месяца в mssql 2008r2  [new]
ondorsal
Member

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

Спасибо огросное! CAST(CONVERT(VARCHAR(6),C.ShipDate,112)+'01' AS DATE)StartMonth сработало.
10 апр 15, 14:17    [17498773]     Ответить | Цитировать Сообщить модератору
 Re: Дата начала месяца в mssql 2008r2  [new]
iap
Member

Откуда: Москва
Сообщений: 47085
ondorsal
xenix,

Спасибо огросное! CAST(CONVERT(VARCHAR(6),C.ShipDate,112)+'01' AS DATE)StartMonth сработало.
FAQ
10 апр 15, 14:29    [17498850]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить