powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Создать таблицу со списком дат. Период задается из дат в колонке таблицы test
10 сообщений из 10, страница 1 из 1
Создать таблицу со списком дат. Период задается из дат в колонке таблицы test
    #40055202
Михаил Л
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте!
Как создать таблицу со списком дат?
Период от 1 января минимального года из дат в колонке таблицы test и до 31 декабря максимального года из дат таблицы test.
В итоге, по примеру, будет таблица с датами от 2013-01-01 и до 2021-12-31
CREATE DATABASE [abc3]
go
use [abc3]
go
create table test (xyz int, дата date)
insert into test values (14, '2016-03-31')
insert into test values (22, '2018-08-01')
insert into test values (63, '2013-02-13')
insert into test values (47, '2021-05-23')
insert into test values (85, '2016-06-11')
insert into test values (16, '2019-04-30')

SELECT Max([дата])
FROM [abc3].[dbo].[test]
...
Рейтинг: 0 / 0
Создать таблицу со списком дат. Период задается из дат в колонке таблицы test
    #40055212
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Михаил Л,

таблицу дат можно построить на основе таблицы номеров, например
Код: sql
1.
select number from master.dbo.spt_values where type = 'p'
...
Рейтинг: 0 / 0
Создать таблицу со списком дат. Период задается из дат в колонке таблицы test
    #40055227
Михаил Л
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Владислав Колосов
таблицу дат можно построить на основе таблицы номеров

Возможно, но не с моими знаниями)
...
Рейтинг: 0 / 0
Создать таблицу со списком дат. Период задается из дат в колонке таблицы test
    #40055231
Фотография court
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Михаил Л,

с spt_values, как бы, так
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
select
	cast(datename(year,min(t.дата)) as datetime)+v.number
from test t
cross join master.dbo.spt_values v where v.type = 'p'
group by
	v.number
having
	cast(datename(year,min(t.дата)) as datetime)+v.number <=cast(datename(year,max(t.дата))+'1231' as datetime) 


но её на "хотелку" не хватит :)
...
Рейтинг: 0 / 0
Создать таблицу со списком дат. Период задается из дат в колонке таблицы test
    #40055235
Михаил Л
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
court
с spt_values

Что это? spt_values

ps. Так то почти работает.
Только максимальная дата - 2018-08-10 00:00:00.000
Почему так?
...
Рейтинг: 0 / 0
Создать таблицу со списком дат. Период задается из дат в колонке таблицы test
    #40055237
Фотография court
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Михаил Л
court
с spt_values

Что это? spt_values
22297255
...
Рейтинг: 0 / 0
Создать таблицу со списком дат. Период задается из дат в колонке таблицы test
    #40055243
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Михаил Л,

авторВозможно, но не с моими знаниями)

В таком случае читайте справку по функциям даты и времени.
...
Рейтинг: 0 / 0
Создать таблицу со списком дат. Период задается из дат в колонке таблицы test
    #40055245
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
select
 dl.d
from
 (select min(дата), max(дата) from test) t(date_min, date_max) cross apply
 (
  select top (datediff(day, t.date_min, t.date_max))
   dateadd(day, row_number() over (order by 1/0) - 1, t.date_min)
  from
   master.dbo.spt_values a cross join
   master.dbo.spt_values b
 ) dl(d);
...
Рейтинг: 0 / 0
Создать таблицу со списком дат. Период задается из дат в колонке таблицы test
    #40055250
Михаил Л
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
invm,
ваш вариант создает даты от минимальной имеющейся даты и до максимальной имеющейся даты.
Ожидается от 1 января года минимальной имеющейся даты и до 31 декабря максимальной имеющейся даты.
...
Рейтинг: 0 / 0
Создать таблицу со списком дат. Период задается из дат в колонке таблицы test
    #40055267
Михаил Л
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Помогите довести до ума)
Один день не хватает)

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
use abc3
select
 dl.d
from
 (select CONCAT (  year(min(дата)) ,'-01-01'), CONCAT (  year(max(дата)) ,'-12-31') from test) t(date_min, date_max) cross apply
 (
  select top (datediff(day, t.date_min, t.date_max))
   dateadd(day, row_number() over (order by 1/0) - 1, t.date_min)
  from
   master.dbo.spt_values a cross join
   master.dbo.spt_values b
 ) dl(d);





пс
Вот так работает)

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
use abc3
select
 dl.d
from
 (select CONCAT (  year(min(дата)) ,'-01-01'), CONCAT (  year(max(дата))+1 ,'-01-01') from test) t(date_min, date_max) cross apply
 (
  select top (datediff(day, t.date_min, t.date_max))
   dateadd(day, row_number() over (order by 1/0) - 1, t.date_min)
  from
   master.dbo.spt_values a cross join
   master.dbo.spt_values b
 ) dl(d);



Большое всем спасибо!
Модератор: Для оформления исходников существует специальный тег src. Не заставляйте людей лишний раз ломать глаза.
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Создать таблицу со списком дат. Период задается из дат в колонке таблицы test
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]