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

Откуда:
Сообщений: 8
Всем привет. Ребят, раньше не приходилось создавать функции в sql. Очень нужна ваша помощь. Заранее благодарен!!!


Задача стоит так:
Написать запрос, создающий функцию StoreStatus(), которая принимает в качестве параметра дату и выводит статусы всех магазинов в эту дату в следующем формате:
StoreKey Status
1 1
2 0

При этом дана таблица(StoreStatus):
StoreKey Date Status
1 10.01.2015 1

В ней указаны все изменения статусов магазинов.
Date – дата изменения статуса.
Status – сам статус (0 – закрыт, 1 - работает).
Чтобы узнать статус магазина за любую дату, нужно посмотреть статус в его последнем изменении, не превышающем исходную дату.
25 янв 17, 03:17    [20142561]     Ответить | Цитировать Сообщить модератору
 Re: Помогите создать функцию  [new]
felix_ff
Member

Откуда: Moscow
Сообщений: 1456
croatoan,

http://google.gik-team.com/?q=create function t-sql
25 янв 17, 07:27    [20142614]     Ответить | Цитировать Сообщить модератору
 Re: Помогите создать функцию  [new]
croatoan
Member

Откуда:
Сообщений: 8
Неужели никто не может помочь?
25 янв 17, 12:02    [20143695]     Ответить | Цитировать Сообщить модератору
 Re: Помогите создать функцию  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
croatoan
Неужели никто не может помочь?

покажите что сделали и где не получается - исправим
25 янв 17, 12:04    [20143704]     Ответить | Цитировать Сообщить модератору
 Re: Помогите создать функцию  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31446
croatoan
Неужели никто не может помочь?
Вы хотя бы начните.
Напишите запрос, который делает то, что вам нужно.
Потом откройте хелп на создание функции, возьмите пример, и вставьте в него ваш запрос.
Если что то не получается - спрашивайте.
25 янв 17, 12:07    [20143728]     Ответить | Цитировать Сообщить модератору
 Re: Помогите создать функцию  [new]
croatoan
Member

Откуда:
Сообщений: 8
alexeyvg
croatoan
Неужели никто не может помочь?
Вы хотя бы начните.
Напишите запрос, который делает то, что вам нужно.
Потом откройте хелп на создание функции, возьмите пример, и вставьте в него ваш запрос.
Если что то не получается - спрашивайте.


вот что получается, но не знаю правильно ли провожу процесс создания функции. В селекте вроде бы верно выбирает значение по последней дате...

Create functions StoreStatus(int)
Returns varchar(12)
As
Begin
Returns select b.Status, first value(b. storekey) over (order by b.date rows between unbounded preceding and unbounded following) from Storestatus b
end
25 янв 17, 12:50    [20143978]     Ответить | Цитировать Сообщить модератору
 Re: Помогите создать функцию  [new]
лолл
Member

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

вас просят создать не скалярную, а табличную функцию
25 янв 17, 13:29    [20144213]     Ответить | Цитировать Сообщить модератору
 Re: Помогите создать функцию  [new]
croatoan
Member

Откуда:
Сообщений: 8
лолл
croatoan,

вас просят создать не скалярную, а табличную функцию


Я поэтому и попросил помощи, потому как никогда не создавал функции и если бы мне помогли на основе поставленных задач сформировать функцию - я бы гораздо быстрее разобрался. Помогите написать, как будет выглядеть?
25 янв 17, 13:57    [20144410]     Ответить | Цитировать Сообщить модератору
 Re: Помогите создать функцию  [new]
buven
Member

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

table valued function sql server example
25 янв 17, 14:04    [20144471]     Ответить | Цитировать Сообщить модератору
 Re: Помогите создать функцию  [new]
Владислав Колосов
Member

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

так в справке все необходимые примеры есть. Или запишитесь на курсы, Вашу работу за Вас никто не сделает.
25 янв 17, 14:12    [20144513]     Ответить | Цитировать Сообщить модератору
 Re: Помогите создать функцию  [new]
croatoan
Member

Откуда:
Сообщений: 8
Владислав Колосов,

понятно, что никто не сделает. Другие вещи я делаю, а данной задачей никогда не занимался. У всех бывает в первый раз. Я думал, что форумчане помогут( А тут стёб-мол иди на курсы и т.д.(ради понимания создания функций). Мне сейчас это надо, куда я побегу.
25 янв 17, 14:40    [20144701]     Ответить | Цитировать Сообщить модератору
 Re: Помогите создать функцию  [new]
лолл
Member

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

CREATE FUNCTION [dbo].[StoreStatusOnDate]
(
  @Date Date
)
  RETURNS TABLE
AS
  RETURN
  (
    SELECT TOP (1)
      [StoreKey],
      [Date],
      [Status]
    FROM [dbo].[StoreStatus]
    WHERE [Date] <= @Date
    ORDER BY [Date] DESC
  )
GO
25 янв 17, 15:32    [20145094]     Ответить | Цитировать Сообщить модератору
 Re: Помогите создать функцию  [new]
o-o
Guest
этот код выведет всего 1 строку,
а ему надо по всем магазинам
25 янв 17, 15:41    [20145175]     Ответить | Цитировать Сообщить модератору
 Re: Помогите создать функцию  [new]
лолл
Member

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

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

CREATE FUNCTION [dbo].[StoreStatusOnDate]
(
  @Date Date
)
  RETURNS TABLE
AS
  RETURN
  (
    SELECT
      [StoreKey],
      [Date],
      [Status]
    FROM
    (
      SELECT
        [Index] = ROW_NUMBER() OVER (PARTITION BY [StoreKey] ORDER BY [Date] DESC),
        [StoreKey],
        [Date],
        [Status]
      FROM [dbo].[StoreStatus]
      WHERE [Date] <= @Date
    ) Q
    WHERE [Index] = 1
  )
GO
25 янв 17, 15:42    [20145186]     Ответить | Цитировать Сообщить модератору
 Re: Помогите создать функцию  [new]
croatoan
Member

Откуда:
Сообщений: 8
лолл
croatoan,

CREATE FUNCTION [dbo].[StoreStatusOnDate]
(
  @Date Date
)
  RETURNS TABLE
AS
  RETURN
  (
    SELECT TOP (1)
      [StoreKey],
      [Date],
      [Status]
    FROM [dbo].[StoreStatus]
    WHERE [Date] <= @Date
    ORDER BY [Date] DESC
  )
GO


Спасибо тебе большое. Блин,я ТОР даже никогда не использовал. Сейчас почитаю)
25 янв 17, 15:44    [20145197]     Ответить | Цитировать Сообщить модератору
 Re: Помогите создать функцию  [new]
croatoan
Member

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

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

CREATE FUNCTION [dbo].[StoreStatusOnDate]
(
  @Date Date
)
  RETURNS TABLE
AS
  RETURN
  (
    SELECT
      [StoreKey],
      [Date],
      [Status]
    FROM
    (
      SELECT
        [Index] = ROW_NUMBER() OVER (PARTITION BY [StoreKey] ORDER BY [Date] DESC),
        [StoreKey],
        [Date],
        [Status]
      FROM [dbo].[StoreStatus]
      WHERE [Date] <= @Date
    ) Q
    WHERE [Index] = 1
  )
GO


Все-таки через ROW правильно?
25 янв 17, 15:45    [20145205]     Ответить | Цитировать Сообщить модератору
 Re: Помогите создать функцию  [new]
лолл
Member

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

Это просто варианты... с нумерацией всегда будет сканирование, что в больших объемах очень плохо... Но я не знаю ньюансов вашей системы.
25 янв 17, 15:46    [20145218]     Ответить | Цитировать Сообщить модератору
 Re: Помогите создать функцию  [new]
croatoan
Member

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

все равно спасибо
25 янв 17, 15:49    [20145240]     Ответить | Цитировать Сообщить модератору
 Re: Помогите создать функцию  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31446
croatoan
понятно, что никто не сделает. Другие вещи я делаю, а данной задачей никогда не занимался. У всех бывает в первый раз. Я думал, что форумчане помогут( А тут стёб-мол иди на курсы и т.д.(ради понимания создания функций). Мне сейчас это надо, куда я побегу.
Да какие курсы, какой стеб?
Вы что, реально справку не читаете?
Я её в некоторые дни открываю по десятку раз, хоть сиквелом (и только им) занимаюсь уже почти 20 лет.
Неужели трудно нажать F1 на слове function, и прочитать хотя бы первую страницу, + пример из 5 строк?
Дольше в несколлько раз тут написать пост, чем прочитать хелп для такой ерунды.
25 янв 17, 17:31    [20145894]     Ответить | Цитировать Сообщить модератору
 Re: Помогите создать функцию  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7869
Некоторые даже не догадываются о существовании документации, справочных систем и полагают, что форумы - это специальное место, где обучают новичков тому, что уже изложено в документах общего доступа.
25 янв 17, 19:14    [20146298]     Ответить | Цитировать Сообщить модератору
 Re: Помогите создать функцию  [new]
Мистер Хенки
Member

Откуда: канализация
Сообщений: 6615
Владислав Колосов
Некоторые даже не догадываются о существовании документации, справочных систем и полагают, что форумы - это специальное место, где обучают новичков тому, что уже изложено в документах общего доступа.

сегодня ему не обьяснят нормально как создавать функцию и где их использовать и что почитать, завтра он разведет своего работодателя на монгу, где нет богомерзкого sql, послезавтра на hh будет на одну вакансию с сиквелом меньше ))))
26 янв 17, 09:44    [20147721]     Ответить | Цитировать Сообщить модератору
 Re: Помогите создать функцию  [new]
лолл
Member

Откуда:
Сообщений: 450
Мистер Хенки,

продолжая вашу цепочку рассуждений можно прийти к выводу, что чем меньше информации на форуме по SQL, тем больше вакансий))
26 янв 17, 10:44    [20148003]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить