Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
Joss Member Откуда: г. Минск Сообщений: 5128 |
Имел дело с MS SQL довольно давно. А тут подкинули задачу и не знаю с какой стороны за неё браться. Есть таблица заказов. В ней заказчики и даты оформления. Надо посчитать интервалы между заказами для каждого заказчика (в днях, если кому интересно). И всё это на запросах. (Если возможно) Просто не знаю с чего начинать. ------------------------------------------------------------- А ты вложил уже свой кровный рубль в 50-ти миллиардное состояние Билла Гейтса? |
28 мар 19, 14:24 [21846119] Ответить | Цитировать Сообщить модератору |
Wlr-l Member Откуда: Сообщений: 523 |
Joss, Начните с того, что для каждого заказа определенного заказчика найдите предыдущий заказ. |
28 мар 19, 14:41 [21846145] Ответить | Цитировать Сообщить модератору |
Joss Member Откуда: г. Минск Сообщений: 5128 |
Это-то понятно, но КАК??? Делаю SELECT с сортировкой по коду заказчика и дате заказа. Глазами вижу, а как это прописать - не знаю. Надо из даты следующего заказа вычесть предыдущий для каждого конкретного заказчика. Вообще дикие мысли в голову лезут. Взять два моих запроса и объединить их по коду заказчика. и добавить расчётное поле - разность дат из первого и второго запроса. Потом сделать выборку из полученного "шедевра". Там где разность 0 -основная запись., к ней добавить запись с минимальным положительным значением разности дат. Такая идея сработает? |
28 мар 19, 15:14 [21846196] Ответить | Цитировать Сообщить модератору |
court Member Откуда: Сообщений: 2253 |
Joss, какая версия сервера ? |
28 мар 19, 15:18 [21846212] Ответить | Цитировать Сообщить модератору |
Joss Member Откуда: г. Минск Сообщений: 5128 |
MS SQL Server 2005 Но знаете, хотя моя идея и выглядит по идиотски, но результаты для дальнейшего анализа она дала. Получилось три поля: код заказчика, дата заказа, число дней до следующего заказа. Ну должен же быть какой-то нормальный метод расчёта? |
28 мар 19, 15:31 [21846231] Ответить | Цитировать Сообщить модератору |
Wlr-l Member Откуда: Сообщений: 523 |
Joss, Если понятно, но КАК не знаешь, то пора взяться за учебники. Привели бы ваши запросы, что не получается? А то сразу версию сервера спрашивают! |
28 мар 19, 15:33 [21846234] Ответить | Цитировать Сообщить модератору |
Wlr-l Member Откуда: Сообщений: 523 |
Пока идеи у вас нет. Сначала получите код заказчика, дата заказа, дата предыдущего заказа. Если это сделать не сможете, то дальше идти смысла нет. |
||
28 мар 19, 15:37 [21846239] Ответить | Цитировать Сообщить модератору |
982183 Member Откуда: VL Сообщений: 3374 |
А prev_value разве не поможет? |
28 мар 19, 15:38 [21846242] Ответить | Цитировать Сообщить модератору |
court Member Откуда: Сообщений: 2253 |
плохо, конечно, но не смертельно :)
select a.заказчик ,a.[дата оформления] ,c.[дата оформления] as [дата пред заказа] ,datediff(day, c.[дата оформления], a.[дата оформления]) as [интервалы между заказами для каждого заказчика (в днях, если кому интересно)] from [Есть таблица заказов] a outer apply (select top 1 b.[дата оформления] from [Есть таблица заказов] b where a.заказчик=b.заказчик and a.[дата оформления]>b.[дата оформления] order by b.[дата оформления] desc) c |
||||
28 мар 19, 15:54 [21846265] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |