Как убедится в том что в поле типа date данные иду

 
0
 
MS SQL Server
ava
lv151 | 02.10.2013, 15:18
Как в SELECT запросе убедиться в том, что в поле, типа date, данные идут последовательности +1 день?
Или выбрать их таким способом, чтобы они шли +1 день?
Comments (10)
ava
Akina | 02.10.2013, 14:34 #
DDL и тест-наполнение в студию. 
ava
lv151 | 02.10.2013, 14:41 #

CREATE TABLE #T1
(
    date1 date
)


INSERT INTO #T1
VALUES('01.01.1900')

INSERT INTO #T1
VALUES('01.02.1900')

INSERT INTO #T1
VALUES('01.03.1900')

INSERT INTO #T1
VALUES('01.05.1900')


DROP TABLE #T1


Я хочу отловить, что даты идут не последовательно +1 день.
ava
Akina | 02.10.2013, 14:46 #
То есть ты хочешь получить от запроса одну запись с одним полем, где будет либо 0, либо -1?
ava
lv151 | 02.10.2013, 14:52 #
Нет, я хочу чтобы выборка из таблицы #T1 делилась на группы, в которой данные идут последовательно +1 день т.е.

Группа1
01.01.1900
01.02.1900
01.03.1900
Группа2
01.05.1900
ava
Zloxa | 02.10.2013, 15:17 #
Цитата (lv151 @  2.10.2013,  15:52 findReferencedText)
выборка из таблицы #T1 делилась на группы, в которой данные идут последовательно +1


Если мы из значения упорядоченного ряда целых значений вычтем порядковый номер строки ряда, то получим уникальный идентификатор для каждой группы подряд идущих значений.

то-же самое можно реализвовать для дат, вычитая дни, тогда идентификатор группы будет типом даты.
на оракле это выглядит так:


SQL> with t as (
  2    select to_date('01.01.1900','MM.DD.YYYY') dt from dual
  3    union all select to_date('01.02.1900','MM.DD.YYYY') dt from dual
  4    union all select to_date('01.03.1900','MM.DD.YYYY') dt from dual
  5    union all select to_date('01.05.1900','MM.DD.YYYY') dt from dual
  6  )
  7  select dt,dt-row_number() over (order by dt) group_id
  8  from t
  9  order by dt
10  /
DT          GROUP_ID
----------- -----------
01.01.1900  31.12.1899
02.01.1900  31.12.1899
03.01.1900  31.12.1899
05.01.1900  01.01.1900


Я не знаю что получится если в MS SQL от даты отнять целое.
В оракле получится дата на количество дней меньшее чем целое.
В MS, думаю, тоже можно как-то отнять целое количество дней от даты.
ava
Akina | 02.10.2013, 15:43 #
Цитата (Zloxa @  2.10.2013,  16:17 findReferencedText)
Я не знаю что получится если в MS SQL от даты отнять целое.

В оракле получится дата меньшая на вычтенное количество дней.

В MS SQL абсолютно так же.
ava
Akina | 02.10.2013, 16:30 #
PS. Это применительно к типам datetime или smalldatetime, и не относится к типу timestamp.
ava
lv151 | 02.10.2013, 16:50 #
Не, изврат. Я думал это как то можно сделать с помощью функций ранджирования.
ava
Zloxa | 02.10.2013, 17:20 #
lv151, row_number- как бы ранжирующая функция.  smile
ava
lv151 | 07.10.2013, 14:39 #
Да, я понимаю. 
Please register or login to write.
Firm of day
Вы также можете добавить свою фирму в каталог IT-фирм, и публиковать статьи, новости, вакансии и другую информацию от имени фирмы.
Подробнее
Contributors
  Akina ava  Zloxa   lv151
advanced
Submit