Гость
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Помогите решить задачу пожалуйста / 12 сообщений из 12, страница 1 из 1
10.03.2021, 02:19
    #40052131
alexandrDr87
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите решить задачу пожалуйста
Задание:

Необходимо вывести все покупки клиента (сумма, дата, наименование) в обратном хронологическом порядке, пока его кредит больше нуля.
В последнюю строку необходимо вывести остаток кредита.(Решение должно работать в MS SQL2008)

Тестовые данные:

DECLARE @Table1 table (Id_Client int, Value money) -- клиенты
-- Id_Client – идентификатор клиента, Value – размер кредита

INSERT INTO @Table1 (Id_Client, Value)
SELECT 1, 24
UNION SELECT 2, 13
UNION SELECT 3, 2
UNION SELECT 4, 5

DECLARE @Table2 table (Id_Client int, DocDate datetime, Amount money, Caption varchar(6)) -- покупки
-- Id_Client – идентификатор клиента, Amount – сумма покупки, DocDate – дата покупки, Caption - наименование покупки

INSERT INTO @Table2 (Id_Client, Amount, DocDate, Caption)

SELECT 1, 5, '20051024', 'qh'
UNION SELECT 1, 9, '20051019', 'wj'
UNION SELECT 1, 3, '20051022', 'ek'
UNION SELECT 1, 8, '20051004', 'rl'
UNION SELECT 1, 6, '20051018', 'tz'
UNION SELECT 1, 5, '20050929', 'yx'
UNION SELECT 2, 11, '20051023', 'uc'
UNION SELECT 2, 6, '20051021', 'iv'
UNION SELECT 2, 45, '20051018', 'ob'
UNION SELECT 3, 4, '20051030', 'pn'
UNION SELECT 3, 2, '20051028', 'am'
UNION SELECT 4, 4, '20051021', 'sq'
UNION SELECT 4, 6, '20051023', 'dw'
UNION SELECT 4, 8, '20051023', 'fe'
UNION SELECT 4, 9, '20051023', 'gr'

Результат:

1 2005-10-24 00:00:00 5.00 qh
1 2005-10-22 00:00:00 3.00 ek
1 2005-10-19 00:00:00 9.00 wj
1 2005-10-18 00:00:00 6.00 tz
1 2005-10-04 00:00:00 1.00 rl
2 2005-10-23 00:00:00 11.00 uc
2 2005-10-21 00:00:00 2.00 iv
3 2005-10-30 00:00:00 2.00 pn
4 2005-10-23 00:00:00 5.00 gr
...
Рейтинг: 0 / 0
10.03.2021, 04:51
    #40052138
fkthat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите решить задачу пожалуйста
alexandrDr87,

У тебя, студент, нихрена не сходится результат со входными данными. Когда копипастишь домашнее задание, то хоть копипасть правильно.

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
;with t as (
select a.Id_Client, a.DocDate, a.Amount, sum(b.Amount) s, c.Value from
  @table2 a, @table2 b, @Table1 c
  where b.Id_Client = a.Id_Client and b.DocDate <= a.DocDate and a.Id_Client = c.Id_Client
  group by a.Id_Client, a.DocDate, a.Amount, c.Value
  having sum(b.Amount) < c.Value
)
select Id_Client, DocDate, Amount from t
  order by Id_Client, DocDate
...
Рейтинг: 0 / 0
10.03.2021, 09:24
    #40052155
alexandrDr87
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите решить задачу пожалуйста
fkthat, спасибо вам за помощь и потраченное время. задание я скопировал один к одному, как было в документе с заданием.

Получается невозможно на основе этих данных сделать вывод требуемый в задании?
...
Рейтинг: 0 / 0
10.03.2021, 11:04
    #40052190
ShIgor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите решить задачу пожалуйста
fkthat,

все в задании и примере правильно, читай внимательно условия задачи.
решение не верное! садись - 2!
...
Рейтинг: 0 / 0
10.03.2021, 11:52
    #40052211
fkthat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите решить задачу пожалуйста
ShIgor
fkthat,

все в задании и примере правильно, читай внимательно условия задачи.
решение не верное! садись - 2!

Для клиента номер 2 первая же покупка перекрывает его кредит больше чем в три раза - как он может оказаться в результате? И еще

alexandrDr87
В последнюю строку необходимо вывести остаток кредита

С какой датой его выводить? Датой китайской пасхи?
...
Рейтинг: 0 / 0
10.03.2021, 12:36
    #40052242
godsql
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите решить задачу пожалуйста
alexandrDr87

Получается невозможно на основе этих данных сделать вывод требуемый в задании?


1. посмотрите на "результат" и найдите там "В последнюю строку необходимо вывести остаток кредита.(Решение должно работать в MS SQL2008)"
2. Попробуйте просчитать данные и вы не получите результата
3. Что-то вроде, коряво
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
;with #t as (
select t1.Id_Client, t2.DocDate, t2.Amount,
t1.Value - sum(t2.Amount) over(partition by t2.Id_Client order by t2.DocDate) as ost,
Caption  
from @Table1 t1 
left join @Table2 t2 on t2.Id_Client=t1.Id_Client
),
#t2 as (
select Id_Client, DocDate, Amount,Caption, ost, 1 as pr
from #t 
where ost >0)
select Id_Client, DocDate, Amount,Caption, pr from #t2
union 
select Id_Client, max(DocDate), min(ost),null, 0 from #t2
group by Id_Client
order by Id_Client asc, pr desc, DocDate desc
...
Рейтинг: 0 / 0
10.03.2021, 12:46
    #40052243
godsql
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите решить задачу пожалуйста
кстати, не совсем верно, т.к. в результате присутствует "признак", что нет в образце "результата"
...
Рейтинг: 0 / 0
10.03.2021, 13:06
    #40052268
ShIgor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите решить задачу пожалуйста
fkthat,

для клиента 2
покупки вычитаем в обратном порядке 11
значит 2 строки:
первая покупка = 11 (остаток 2 на ум пошло)
вторая покупка невозможна (6) значит выводим остаток кредита = 2
...
Рейтинг: 0 / 0
10.03.2021, 13:32
    #40052280
fkthat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите решить задачу пожалуйста
ShIgor
покупки вычитаем в обратном порядке 11

Хм.... На деле просто ничерта непонятно, что значит

alexandrDr87
пока его кредит больше нуля.

В моем представлении есть некоторый кредит, из которого ты совершаешь покупки, при этом, соответственно, каждый раз твой кредит уменьшается. А как это, интересно, можно совершать покупки "в обратном хронологическом порядке" - сначала купили что-то вчера, а потом купили еще что-то позавчера?
...
Рейтинг: 0 / 0
10.03.2021, 13:43
    #40052290
godsql
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите решить задачу пожалуйста
ShIgor
fkthat,

для клиента 2
покупки вычитаем в обратном порядке 11
значит 2 строки:
первая покупка = 11 (остаток 2 на ум пошло)
вторая покупка невозможна (6) значит выводим остаток кредита = 2

Падаждите! С чего это "вычитаем в обратном порядке"? В задании написано : " вывести все покупки клиента ...в обратном хронологическом порядке".
Соответственно, для клиента "2" первая покупка "45", что больше кредита "13", что автоматически опускает остаток кредита в "-"
...
Рейтинг: 0 / 0
10.03.2021, 15:50
    #40052349
ShIgor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите решить задачу пожалуйста
godsql,

там точки нет.
после запятой условие задачи продолжается.
и не надо бизнес задачу притягивать к здравой логике.
при выполнении любой задачи это первостепенное правило, если что-то не понятно и/или сомневаешься - уточняй у бизнеса, доказывай что это бред, но самостоятельно менять условие задачи не имеешь права. инициатива наказуема.
...
Рейтинг: 0 / 0
10.03.2021, 16:55
    #40052377
fkthat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите решить задачу пожалуйста
ShIgor
сомневаешься - уточняй у бизнеса

Бизнес недоступен, потому что

alexandrDr87
задание я скопировал один к одному

Ну, хоть скопировал, а не просто сфотографировал на телефон, как многие. Уже и то хорошо :)
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Помогите решить задачу пожалуйста / 12 сообщений из 12, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]