:: Игры Разума
Re: Вопросы на собеседовании 6
piva

Сообщений: 18655
Откуда: Курган
Дата регистрации: 24.03.2004
Чета у меня спокойно через 1 селект, только было удивление что фокс
create table #приход (id int, amount int)
переваривает, а
create cursor #приход (id int, amount int)
уже не хочет


------------------
Часто бывает так, что есть над чем задуматься, а нечем.
Ratings: 0 negative/0 positive
Re: Вопросы на собеседовании 6
Prudivus

Сообщений: 4283
Откуда: Кишинев
Дата регистрации: 14.12.2006
Цитата:
А что First определяется по ID что ли ?
Максимально упрощенный, "академический" вариант.
Ratings: 0 negative/0 positive
Re: Вопросы на собеседовании 6
Prudivus

Сообщений: 4283
Откуда: Кишинев
Дата регистрации: 14.12.2006
Да, собственно, решение ожидается для MS SQL, не уверен что в фоксе такое прокатит.
Ratings: 0 negative/0 positive
Re: Вопросы на собеседовании 6
piva

Сообщений: 18655
Откуда: Курган
Дата регистрации: 24.03.2004
Select Union All не прокатит что ли ?


------------------
Часто бывает так, что есть над чем задуматься, а нечем.
Ratings: 0 negative/0 positive
Re: Вопросы на собеседовании 6
AleksM
Автор

Сообщений: 17881
Дата регистрации: 11.11.2003
Или я не понял, или селект с юнион


------------------
Лучше переесть, чем недоспать.
Не спеши, а то успеешь.
Ratings: 0 negative/0 positive
Re: Вопросы на собеседовании 6
Prudivus

Сообщений: 4283
Откуда: Кишинев
Дата регистрации: 14.12.2006
Желательно полный текст запроса, все не так просто.

Для любителей цветочков:
-- расчет курса указанной валюты на указанную дату
CREATE FUNCTION Курс_валюты (@дата дата, @валюта валюта)
RETURNS decimal(15,6)
AS
BEGIN
return isnull((select top 1 к.курс / в.за_сколько as курс
from Курсы_валют к join Валюты в on к.валюта = в.валюта
where к.валюта = @валюта and к.дата <= @дата
order by дата desc), 0)
END
Ratings: 0 negative/0 positive
Re: Вопросы на собеседовании 6
AleksM
Автор

Сообщений: 17881
Дата регистрации: 11.11.2003
Это маненько не то. Курсы ВАЛЮТ на дату.


------------------
Лучше переесть, чем недоспать.
Не спеши, а то успеешь.
Ratings: 0 negative/0 positive
Re: Вопросы на собеседовании 6
Prudivus

Сообщений: 4283
Откуда: Кишинев
Дата регистрации: 14.12.2006
В изначальной постановке именно валюты (документ, его дата и валюта). Самое простое - используя вышеприведенную удф сделать селект по таблице валют. Без удфки надо покумекать...



Исправлено 1 раз(а). Последнее : Prudivus, 28.02.07 15:41
Ratings: 0 negative/0 positive
Re: Вопросы на собеседовании 6
AleksM
Автор

Сообщений: 17881
Дата регистрации: 11.11.2003
Не для MS SQL, а для 9-ки
CREATE CURSOR Incoming (id int, amount int)
CREATE CURSOR Outcoming (id int, amount int)
INSERT INTO Incoming values (1, 10)
insert INTO Incoming values (2, 20)
insert INTO Incoming values (3, 24)
insert INTO Incoming values (4, 40)
insert INTO Outcoming values (1, 5)
insert INTO Outcoming values (2, 7)
insert INTO Outcoming values (3, 3)
insert INTO Outcoming values (4, 16)
insert INTO Outcoming values (5, 4)
insert INTO Outcoming values (6, 13)
insert INTO Outcoming values (7, 31)
SELECT d.ID, SUM(d.InQty) InQty, SUM(d.OutQty) OutQty ;
FROM (SELECT a.ID, SUM(a.Amount) InQty, SUM(a.Amount-a.Amount) OutQty ;
FROM Incoming a;
GROUP BY a.ID ;
UNION ;
SELECT b.ID, SUM(b.Amount-b.Amount) InQty, SUM(b.Amount) OutQty ;
FROM Outcoming b;
GROUP BY b.ID) d ;
group by 1


------------------
Лучше переесть, чем недоспать.
Не спеши, а то успеешь.
Ratings: 0 negative/0 positive
Re: Вопросы на собеседовании 6
Prudivus

Сообщений: 4283
Откуда: Кишинев
Дата регистрации: 14.12.2006
Хозяин, может быть такой колор: ;)
declare @date datetime
set @date = getdate()
select *,
(select top 1 курс from курсы_валют
where валюта = c.валюта
order by дата desc) курс
from валюты c



Исправлено 1 раз(а). Последнее : Prudivus, 28.02.07 15:46
Ratings: 0 negative/0 positive
Re: Вопросы на собеседовании 6
AleksM
Автор

Сообщений: 17881
Дата регистрации: 11.11.2003
Не одной валюты, а всех валют курсатора.


------------------
Лучше переесть, чем недоспать.
Не спеши, а то успеешь.
Ratings: 0 negative/0 positive
Re: Вопросы на собеседовании 6
Prudivus

Сообщений: 4283
Откуда: Кишинев
Дата регистрации: 14.12.2006
SELECT d.ID, SUM(d.InQty) InQty, SUM(d.OutQty) OutQty
Так, стоп! Видимо я недостаточно точно выразился. выходная таблица должна иметь вид
create table #in_out (id_in int, id_out int, amount int)
то есть обеспечивать связь многие-ко-многим между первыми таблицами.
Ratings: 0 negative/0 positive
Re: Вопросы на собеседовании 6
Prudivus

Сообщений: 4283
Откуда: Кишинев
Дата регистрации: 14.12.2006
Цитата:
Не одной валюты, а всех валют курсатора.
проверено на живой БД - работает, выдает все валюты и их курсы.
Ratings: 0 negative/0 positive
Re: Вопросы на собеседовании 6
Prudivus

Сообщений: 4283
Откуда: Кишинев
Дата регистрации: 14.12.2006
Предлагаю модератору перенести вопрос по связи в отдельную тему.
Ratings: 0 negative/0 positive
Re: Вопросы на собеседовании 6
AleksM
Автор

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


------------------
Лучше переесть, чем недоспать.
Не спеши, а то успеешь.
Ratings: 0 negative/0 positive
Re: Вопросы на собеседовании 6
Prudivus

Сообщений: 4283
Откуда: Кишинев
Дата регистрации: 14.12.2006
Я понимаю, последний мой селект именно это и выдает. В MS SQL-е, конечно. Сорри, там есть неточность: дату выборки не учел.

declare @date datetime
set @date = getdate()
select *,
(select top 1 курс from курсы_валют
where валюта = c.валюта
and дата <= @date
order by дата desc) курс
from валюты c



Исправлено 2 раз(а). Последнее : Prudivus, 28.02.07 15:59
Ratings: 0 negative/0 positive
Re: Вопросы на собеседовании 6
AleksM
Автор

Сообщений: 17881
Дата регистрации: 11.11.2003
А в 7-ке получилось два запроса. Подзапросы там не проходят.


------------------
Лучше переесть, чем недоспать.
Не спеши, а то успеешь.
Ratings: 0 negative/0 positive
Re: Вопросы на собеседовании 6
Prudivus

Сообщений: 4283
Откуда: Кишинев
Дата регистрации: 14.12.2006
А в 9-ке не пробовал?
Ratings: 0 negative/0 positive
Re: Вопросы на собеседовании 6
ssa

Сообщений: 13007
Откуда: Москва
Дата регистрации: 23.03.2005
Вот жеж торопыги...
Навскидку, без проверки:
CREATE FUNCTION Курс_валюты (@дата дата, @валюта валюта)
RETURNS decimal(15,6)
AS
BEGIN
return
select курс from курсы_валют
where валюта = @валюта
and дата = (select MAX(дата) from курсы_валют where дата <= @date and валюта = @валюта)
end


------------------
Лень - это неосознанная мудрость.
Ratings: 0 negative/0 positive
Re: Вопросы на собеседовании 6
ssa

Сообщений: 13007
Откуда: Москва
Дата регистрации: 23.03.2005
Вот, забыл еще один вопрос с собеседования.

1. Написать Update поля суммой двух других полей таблицы там, где эта сумма больше нуля.


------------------
Лень - это неосознанная мудрость.
Ratings: 0 negative/0 positive


Извините, только зарегистрированные пользователи могут оставлять сообщения в этом форуме.

On-line: 4 (Гостей: 4)

© 2000-2024 Fox Club 
Яндекс.Метрика