for flooders
:: Главная :: Решения :: Статьи :: Сайт М. Дроздова :: Файловый архив :: Книга по VFP 9 :: Русский Help Online :: OFF-LINE Форум
   Л и с о в о д ы   в с е х   с т р а н,  о б ъ е д и н я й т е с ь !!!  

Список Форумов  :: Игры Разума
   :: Помощь сайту :: 

Re: Вопросы на собеседовании 6
piva
[Болтун]

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


------------------
Часто бывает так, что есть над чем задуматься, а нечем.
Ratings: 0 negative/0 positive

Re: Вопросы на собеседовании 6
Prudivus

Сообщений: 4283
Откуда: Кишинев
Дата: 28.02.07 14:22:00ОтветитьЦитировать
Цитата:
А что First определяется по ID что ли ?
Максимально упрощенный, "академический" вариант.
Ratings: 0 negative/0 positive

Re: Вопросы на собеседовании 6
Prudivus

Сообщений: 4283
Откуда: Кишинев
Дата: 28.02.07 14:24:06ОтветитьЦитировать
Да, собственно, решение ожидается для MS SQL, не уверен что в фоксе такое прокатит.
Ratings: 0 negative/0 positive

Re: Вопросы на собеседовании 6
piva
[Болтун]

Сообщений: 18533
Откуда: Курган
Дата: 28.02.07 14:27:01ОтветитьЦитировать
Select Union All не прокатит что ли ?


------------------
Часто бывает так, что есть над чем задуматься, а нечем.
Ratings: 0 negative/0 positive

Re: Вопросы на собеседовании 6
AleksM
[Админ]
Автор

Сообщений: 17704
Дата: 28.02.07 14:27:32ОтветитьЦитировать
Или я не понял, или селект с юнион


------------------
Лучше переесть, чем недоспать.
Не спеши, а то успеешь.
Ratings: 0 negative/0 positive

Re: Вопросы на собеседовании 6
Prudivus

Сообщений: 4283
Откуда: Кишинев
Дата: 28.02.07 14:29:28ОтветитьЦитировать
Желательно полный текст запроса, все не так просто.

Для любителей цветочков:
-- расчет курса указанной валюты на указанную дату  
  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
[Админ]
Автор

Сообщений: 17704
Дата: 28.02.07 14:32:05ОтветитьЦитировать
Это маненько не то. Курсы ВАЛЮТ на дату.


------------------
Лучше переесть, чем недоспать.
Не спеши, а то успеешь.
Ratings: 0 negative/0 positive

Re: Вопросы на собеседовании 6
Prudivus

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



Исправлено: Prudivus, 28.02.07 14:41
Ratings: 0 negative/0 positive

Re: Вопросы на собеседовании 6
AleksM
[Админ]
Автор

Сообщений: 17704
Дата: 28.02.07 14:44:08ОтветитьЦитировать
Не для 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
Откуда: Кишинев
Дата: 28.02.07 14:45:14ОтветитьЦитировать
Хозяин, может быть такой колор:
declare @date datetime  
  set @date = getdate()  
    
  select *,  
    (select top 1 курс from курсы_валют  
     where валюта = c.валюта  
     order by дата desc) курс  
   from валюты c



Исправлено: Prudivus, 28.02.07 14:46
Ratings: 0 negative/0 positive

Re: Вопросы на собеседовании 6
AleksM
[Админ]
Автор

Сообщений: 17704
Дата: 28.02.07 14:47:02ОтветитьЦитировать
Не одной валюты, а всех валют курсатора.


------------------
Лучше переесть, чем недоспать.
Не спеши, а то успеешь.
Ratings: 0 negative/0 positive

Re: Вопросы на собеседовании 6
Prudivus

Сообщений: 4283
Откуда: Кишинев
Дата: 28.02.07 14:49:27ОтветитьЦитировать
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
Откуда: Кишинев
Дата: 28.02.07 14:50:39ОтветитьЦитировать
Цитата:
Не одной валюты, а всех валют курсатора.
проверено на живой БД - работает, выдает все валюты и их курсы.
Ratings: 0 negative/0 positive

Re: Вопросы на собеседовании 6
Prudivus

Сообщений: 4283
Откуда: Кишинев
Дата: 28.02.07 14:51:49ОтветитьЦитировать
Предлагаю модератору перенести вопрос по связи в отдельную тему.
Ratings: 0 negative/0 positive

Re: Вопросы на собеседовании 6
AleksM
[Админ]
Автор

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


------------------
Лучше переесть, чем недоспать.
Не спеши, а то успеешь.
Ratings: 0 negative/0 positive

Re: Вопросы на собеседовании 6
Prudivus

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

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



Исправлено: Prudivus, 28.02.07 14:59
Ratings: 0 negative/0 positive

Re: Вопросы на собеседовании 6
AleksM
[Админ]
Автор

Сообщений: 17704
Дата: 28.02.07 15:02:42ОтветитьЦитировать
А в 7-ке получилось два запроса. Подзапросы там не проходят.


------------------
Лучше переесть, чем недоспать.
Не спеши, а то успеешь.
Ratings: 0 negative/0 positive

Re: Вопросы на собеседовании 6
Prudivus

Сообщений: 4283
Откуда: Кишинев
Дата: 28.02.07 15:06:45ОтветитьЦитировать
А в 9-ке не пробовал?
Ratings: 0 negative/0 positive

Re: Вопросы на собеседовании 6
ssa
[Модератор]

Сообщений: 12213
Откуда: Москва
Дата: 28.02.07 15:12:28ОтветитьЦитировать
Вот жеж торопыги...
Навскидку, без проверки:
  
   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
[Модератор]

Сообщений: 12213
Откуда: Москва
Дата: 02.03.07 08:32:01ОтветитьЦитировать
Вот, забыл еще один вопрос с собеседования.

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


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



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

On-line: 83 param  and Guests: 82


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