Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
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] Ответить | Цитировать Сообщить модератору |
PlanB Member Откуда: Moscow Сообщений: 2762 |
коммент ко 2 задаче - интересен средний интервал между платежами с каждого account за определенный год. |
1 фев 13, 14:12 [13861974] Ответить | Цитировать Сообщить модератору |
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] Ответить | Цитировать Сообщить модератору |
aleks2
Guest |
= ( date(1) - date(последнего) ) /число интервалов |
1 фев 13, 14:19 [13862034] Ответить | Цитировать Сообщить модератору |
PlanB Member Откуда: Moscow Сообщений: 2762 |
дык а кодом-то как? |
1 фев 13, 14:54 [13862295] Ответить | Цитировать Сообщить модератору |
Гость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] Ответить | Цитировать Сообщить модератору |
PlanB Member Откуда: Moscow Сообщений: 2762 |
относительно Ваших уполне резонных вопросов могу предположить следующее 1. если платеж единственный в году - пустое место/ошибка, что угодно 2. 31.12.2011, 30.12.2012 и 31.12.2012 - длина 1 день по той же логике. берем только год. думаю, так будет корректено |
||
1 фев 13, 15:21 [13862446] Ответить | Цитировать Сообщить модератору |
PlanB Member Откуда: Moscow Сообщений: 2762 |
|
|
1 фев 13, 15:23 [13862456] Ответить | Цитировать Сообщить модератору |
Гость333 Member Откуда: Сообщений: 3683 |
Для первой задачи не имеет. Для второй — код может существенно различаться. Например, в SQL Server 2000 не было оконных функций. |
||
1 фев 13, 15:25 [13862468] Ответить | Цитировать Сообщить модератору |
Exproment Member Откуда: Сообщений: 416 |
через BOL |
||
1 фев 13, 20:33 [13864150] Ответить | Цитировать Сообщить модератору |
PlanB Member Откуда: Moscow Сообщений: 2762 |
при всем уважении, нельзя ли получить ответы на мои два изначальных вопроса - правильно ли я сделал 1 задачку и код для второй. еще раз спасибо |
4 фев 13, 09:07 [13870414] Ответить | Цитировать Сообщить модератору |
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] Ответить | Цитировать Сообщить модератору |
aleks2
Guest |
Ежели задуматься о "средний временной интервал между платежами за конкретный год", то DATEDIFF(DAY, min(date),max(date)) ваще можно заменить на 365. |
||
4 фев 13, 09:49 [13870524] Ответить | Цитировать Сообщить модератору |
Cygapb-007 Member Откуда: Сообщений: 1677 |
Если count есть - не вижу разницы) |
4 фев 13, 09:59 [13870569] Ответить | Цитировать Сообщить модератору |
PlanB Member Откуда: Moscow Сообщений: 2762 |
Cygapb-007, благодарствую |
4 фев 13, 10:00 [13870573] Ответить | Цитировать Сообщить модератору |
Cygapb-007 Member Откуда: Сообщений: 1677 |
Опс, соврал:) при оплате в трёх последних месяцах, например, разница существенная:) |
4 фев 13, 10:01 [13870581] Ответить | Цитировать Сообщить модератору |
PlanB Member Откуда: Moscow Сообщений: 2762 |
|
||
4 фев 13, 10:04 [13870586] Ответить | Цитировать Сообщить модератору |
Cygapb-007 Member Откуда: Сообщений: 1677 |
|
||||
4 фев 13, 10:15 [13870631] Ответить | Цитировать Сообщить модератору |
PlanB Member Откуда: Moscow Сообщений: 2762 |
поэтому я добавил еще WHERE YEAR(Date_time) = 2012, что, думаю, не будет лишним. |
||||
4 фев 13, 10:23 [13870682] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |