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

Откуда: оттуда
Сообщений: 26
Я сделал таким образом - может есть более лаконичное решение?
select distinct CAST(YEAR(date_time) AS varchar(12)) + '.' + CAST( CEILING(MONTH(date_time)/10) AS varchar(12))+CAST(MONTH(date_time)%10 AS varchar(12)) as yearandmonth
		from sometable

Соотв вот что у меня получилось:
yearandmonth
2000.01
2011.03
2011.04
2011.05
2011.06
2011.07
2011.08
2011.09
2011.10
2011.11
2011.12
2012.01
2012.02
27 фев 12, 18:12    [12159530]     Ответить | Цитировать Сообщить модератору
 Re: Как правильно выбрать все месяцы из одного столбца  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
Зачем их выбирать?
27 фев 12, 18:12    [12159533]     Ответить | Цитировать Сообщить модератору
 Re: Как правильно выбрать все месяцы из одного столбца  [new]
Red2
Member

Откуда: оттуда
Сообщений: 26
Гавриленко Сергей Алексеевич,

Чтоб потом выбрать ближайшее время к началу и концу месяца, и соответствующие записи из столбца данных
27 фев 12, 18:14    [12159554]     Ответить | Цитировать Сообщить модератору
 Re: Как правильно выбрать все месяцы из одного столбца  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
Red2
Гавриленко Сергей Алексеевич,

Чтоб потом выбрать ближайшее время к началу и концу месяца, и соответствующие записи из столбца данных
Календарь сделать гораздо проще. Особенно, когда окажется что в sometable два терабайта данных за год.
27 фев 12, 18:17    [12159573]     Ответить | Цитировать Сообщить модератору
 Re: Как правильно выбрать все месяцы из одного столбца  [new]
Red2
Member

Откуда: оттуда
Сообщений: 26
Гавриленко Сергей Алексеевич,

Расскажите пожалуйста как его делать?
27 фев 12, 21:50    [12160574]     Ответить | Цитировать Сообщить модератору
 Re: Как правильно выбрать все месяцы из одного столбца  [new]
Glory
Member

Откуда:
Сообщений: 104751
Red2
Расскажите пожалуйста как его делать?

create table calendar ...
27 фев 12, 21:58    [12160595]     Ответить | Цитировать Сообщить модератору
 Re: Как правильно выбрать все месяцы из одного столбца  [new]
Grigory Krasnopolskiy
Member

Откуда: Зеленоград
Сообщений: 15
create table Calendar (cdat date, yy smallint, mm smallint, yyyymm smallint)-- добавить нужные колонки вроде номера дня недели, признака рабочего дня и т.п.

declare @d1 date = '19900101',@d2 date = '21000101'
declare @i date = @d1
while @i <@d2 begin
insert into Calendar(cdat,yy,mm,yyyymm)
select @i, datepart(year,@i),datepart(month,@i),datepart(year,@i)*100+datepart(month,@i)
end

create clustered index ic_Calendar on Calendar (cdat, yy, mm)--в идекс включить то что требуется джойнить или фильтровать
27 фев 12, 23:52    [12160930]     Ответить | Цитировать Сообщить модератору
 Re: Как правильно выбрать все месяцы из одного столбца  [new]
Red2
Member

Откуда: оттуда
Сообщений: 26
Glory, Петросян отдыхает, ага.
Grigory Krasnopolskiy, спасибо, но мне календарь интересен в контексте задачи из первого сообщения в теме.

И любопытно каким образом календарь может помочь выбрать данные из таблицы в которой могут отсутствовать данные в некоторых месяцах? ( кстати эта задача уже решена тут )
28 фев 12, 09:12    [12161478]     Ответить | Цитировать Сообщить модератору
 Re: Как правильно выбрать все месяцы из одного столбца  [new]
Glory
Member

Откуда:
Сообщений: 104751
Red2
Glory, Петросян отдыхает, ага.

А вопрос ваш просто блещет новизной и оригинальностью.
Если хотите лопатить сотни тысяч записей то это ваша проблема
28 фев 12, 09:49    [12161613]     Ответить | Цитировать Сообщить модератору
 Re: Как правильно выбрать все месяцы из одного столбца  [new]
iljy
Member

Откуда:
Сообщений: 8711
Red2
И любопытно каким образом календарь может помочь выбрать данные из таблицы в которой могут отсутствовать данные в некоторых месяцах? ( кстати эта задача уже решена тут )

Тривиально: через LEFT JOIN
28 фев 12, 10:18    [12161782]     Ответить | Цитировать Сообщить модератору
 Re: Как правильно выбрать все месяцы из одного столбца  [new]
Red2
Member

Откуда: оттуда
Сообщений: 26
Glory
лопатить сотни тысяч записей


Мне от этого похоже не избавиться, т.к. например в первый (равно как и в последний) день месяца может и не быть записей.

iljy
LEFT JOIN

Сервер и так 8 секунд выполняет 12158389
28 фев 12, 11:53    [12162460]     Ответить | Цитировать Сообщить модератору
 Re: Как правильно выбрать все месяцы из одного столбца  [new]
Glory
Member

Откуда:
Сообщений: 104751
Red2
Мне от этого похоже не избавиться, т.к. например в первый (равно как и в последний) день месяца может и не быть записей.

В году 365 дней
Календарь на 10 лет будет содержать 3650 записей, на 100 - 36500
28 фев 12, 11:57    [12162487]     Ответить | Цитировать Сообщить модератору
 Re: Как правильно выбрать все месяцы из одного столбца  [new]
iljy
Member

Откуда:
Сообщений: 8711
Red2
iljy
LEFT JOIN

Сервер и так 8 секунд выполняет 12158389

Много конечно. Поэтому и говорю - используйте LEFT JOIN.
28 фев 12, 13:38    [12163416]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить