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

Откуда: Moscow
Сообщений: 2762
прошу прокомментировать решение первой задачи и помочь с решением второй. сори за школьные приколы, но накосячить низя ну никак :)

1) таблица mytab_1: id, date, account, property, value1, value2.
для значений property = 10 указать value2 для всех account

select a.account, a.value2 from mytab_1 a
where a.property = 10


2) таблица mytab_2: id, account (номер счета), date (время платежа), sum (сумма платежа).

надо вычислить средний временной интервал между платежами за конкретный год. например, за 2012.
1 фев 13, 14:10    [13861957]     Ответить | Цитировать Сообщить модератору
 Re: полторы простенькие задачки  [new]
PlanB
Member

Откуда: Moscow
Сообщений: 2762
коммент ко 2 задаче - интересен средний интервал между платежами с каждого account за определенный год.
1 фев 13, 14:12    [13861974]     Ответить | Цитировать Сообщить модератору
 Re: полторы простенькие задачки  [new]
aleks2
Guest
2) таблица mytab_2: id, account (номер счета), date (время платежа), sum (сумма платежа).

средний интервал между платежами =
= сумма по i от 1 до предпоследнего ( date(i) - date(i+1) )/число интервалов =
= ( сумма по i от 1 до предпоследнего (date(i)) - сумма по i от 1 до предпоследнего (date(i+1)) ) /число интервалов =
= ( сумма по i от 1 до предпоследнего (date(i)) - сумма по i от 2 до последнего (date(i)) ) /число интервалов
1 фев 13, 14:17    [13862018]     Ответить | Цитировать Сообщить модератору
 Re: полторы простенькие задачки  [new]
aleks2
Guest
= ( date(1) - date(последнего) ) /число интервалов
1 фев 13, 14:19    [13862034]     Ответить | Цитировать Сообщить модератору
 Re: полторы простенькие задачки  [new]
PlanB
Member

Откуда: Moscow
Сообщений: 2762
дык а кодом-то как?
1 фев 13, 14:54    [13862295]     Ответить | Цитировать Сообщить модератору
 Re: полторы простенькие задачки  [new]
Гость333
Member

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

select @@version — какой у вас?

Не совсем ясно условие задачи.
Если контрагент сделал один платёж 31.12.2011, а второй платёж — 31.12.2012 (и этот платёж оказался единственным в 2012 году), что должен выдавать запрос?
А если платежи были 31.12.2011, 30.12.2012 и 31.12.2012?
А если за всю историю контрагента был всего один платёж 31.12.2012?
1 фев 13, 15:13    [13862396]     Ответить | Цитировать Сообщить модератору
 Re: полторы простенькие задачки  [new]
PlanB
Member

Откуда: Moscow
Сообщений: 2762
Гость333
PlanB,

select @@version — какой у вас?

Не совсем ясно условие задачи.
Если контрагент сделал один платёж 31.12.2011, а второй платёж — 31.12.2012 (и этот платёж оказался единственным в 2012 году), что должен выдавать запрос?
А если платежи были 31.12.2011, 30.12.2012 и 31.12.2012?
А если за всю историю контрагента был всего один платёж 31.12.2012?
в контексте данных задач версия не имеет значение. просто код надо.

относительно Ваших уполне резонных вопросов могу предположить следующее
1. если платеж единственный в году - пустое место/ошибка, что угодно
2. 31.12.2011, 30.12.2012 и 31.12.2012 - длина 1 день по той же логике. берем только год.
думаю, так будет корректено
1 фев 13, 15:21    [13862446]     Ответить | Цитировать Сообщить модератору
 Re: полторы простенькие задачки  [new]
PlanB
Member

Откуда: Moscow
Сообщений: 2762
+ select @@version
Microsoft SQL Server 2008 R2 (RTM) - 10.50.1600.1 (Intel X86) Apr 2 2010 15:53:02 Copyright (c) Microsoft Corporation Express Edition with Advanced Services on Windows NT 6.1 <X86> (Build 7601: Service Pack 1)
1 фев 13, 15:23    [13862456]     Ответить | Цитировать Сообщить модератору
 Re: полторы простенькие задачки  [new]
Гость333
Member

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

Для первой задачи не имеет. Для второй — код может существенно различаться. Например, в SQL Server 2000 не было оконных функций.
1 фев 13, 15:25    [13862468]     Ответить | Цитировать Сообщить модератору
 Re: полторы простенькие задачки  [new]
Exproment
Member

Откуда:
Сообщений: 416
PlanB
дык а кодом-то как?

через BOL
1 фев 13, 20:33    [13864150]     Ответить | Цитировать Сообщить модератору
 Re: полторы простенькие задачки  [new]
PlanB
Member

Откуда: Moscow
Сообщений: 2762
при всем уважении, нельзя ли получить ответы на мои два изначальных вопроса - правильно ли я сделал 1 задачку и код для второй.

еще раз спасибо
4 фев 13, 09:07    [13870414]     Ответить | Цитировать Сообщить модератору
 Re: полторы простенькие задачки  [new]
Cygapb-007
Member

Откуда:
Сообщений: 1677
так ответили ж уже в 13862034
;with mytab_2( id, account, date, sum) as(select 0,0,0,0)
SELECT account, DATEDIFF(DAY, min(date),max(date))/isnull(nullif(count(*)-1,0),1)
FROM mytab_2 group by account
4 фев 13, 09:45    [13870506]     Ответить | Цитировать Сообщить модератору
 Re: полторы простенькие задачки  [new]
aleks2
Guest
Cygapb-007
так ответили ж уже в 13862034
;with mytab_2( id, account, date, sum) as(select 0,0,0,0)
SELECT account, DATEDIFF(DAY, min(date),max(date))/isnull(nullif(count(*)-1,0),1)
FROM mytab_2 group by account


Ежели задуматься о "средний временной интервал между платежами за конкретный год", то
DATEDIFF(DAY, min(date),max(date))
ваще можно заменить на 365.
4 фев 13, 09:49    [13870524]     Ответить | Цитировать Сообщить модератору
 Re: полторы простенькие задачки  [new]
Cygapb-007
Member

Откуда:
Сообщений: 1677
Если count есть - не вижу разницы)
4 фев 13, 09:59    [13870569]     Ответить | Цитировать Сообщить модератору
 Re: полторы простенькие задачки  [new]
PlanB
Member

Откуда: Moscow
Сообщений: 2762
Cygapb-007, благодарствую
4 фев 13, 10:00    [13870573]     Ответить | Цитировать Сообщить модератору
 Re: полторы простенькие задачки  [new]
Cygapb-007
Member

Откуда:
Сообщений: 1677
Опс, соврал:) при оплате в трёх последних месяцах, например, разница существенная:)
4 фев 13, 10:01    [13870581]     Ответить | Цитировать Сообщить модератору
 Re: полторы простенькие задачки  [new]
PlanB
Member

Откуда: Moscow
Сообщений: 2762
Cygapb-007
Опс, соврал:) при оплате в трёх последних месяцах, например, разница существенная:)
эмм, таки как правильно-то))))
4 фев 13, 10:04    [13870586]     Ответить | Цитировать Сообщить модератору
 Re: полторы простенькие задачки  [new]
Cygapb-007
Member

Откуда:
Сообщений: 1677
PlanB
Cygapb-007
Опс, соврал:) при оплате в трёх последних месяцах, например, разница существенная:)
эмм, таки как правильно-то))))
Так зависит от постановки задачи) если за год - то вычислять число дней в году, если между платежами за год - то как в коде:)
4 фев 13, 10:15    [13870631]     Ответить | Цитировать Сообщить модератору
 Re: полторы простенькие задачки  [new]
PlanB
Member

Откуда: Moscow
Сообщений: 2762
Cygapb-007
PlanB
пропущено...
эмм, таки как правильно-то))))
Так зависит от постановки задачи) если за год - то вычислять число дней в году, если между платежами за год - то как в коде:)
....между платежами за конкретный год...

поэтому я добавил еще WHERE YEAR(Date_time) = 2012, что, думаю, не будет лишним.
4 фев 13, 10:23    [13870682]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить