[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Тестовое задание - помогите выполнить
Страницы: 1, 2, 3, 4, 5, 6, 7
Michael
Тут фишка в том, что они вносят в БД по дате курс и он становится с этого момента текущим.

Есть "самая поздняя" запись
2012-02-01	USD	29

Соответственно сейчас позже чем 1 февраля.
Как получить курс евро - самая "последняя" запись -
2012-01-03	EUR	40,3

Вот это текущий сейчас курс евро на сайте.

Вот для таких условий надо решить задачу.

_____________
There never was a struggle in the soul of a good man that was not hard
Michael
Цитата (aRpi)
ВОТ КАК Я ЕГО РЕШИЛ (прям так и написал в ответе):

Тебе еще рано на вакансии претендовать.
Этим решением ты продемонстрировал им что:
1) ты элементарно думаешь слабовато
2) знания базового sql страдают

Этого достаточно чтобы с тобой дальше не иметь дел.

_____________
There never was a struggle in the soul of a good man that was not hard
S.Chushkin
Michael почти прав и всё же не прав.
"Текущий курс" это курс на текущую дату. Текущей датой может быть любая дата в принципе, заданная юзером, но как правило используют дату на "сегодня".
Т.е. задачу можно описать так: найти последние записи по всем валютам с датой <= текущей. (в пределах теста, конечно)

Также согласен с Michael - ТС надо основательно подтянуть базовые знания по PHP и SQL, тогда шансов пройти тесты будет заметно больше.

_____________
Рекламка / ad.pesow.com Хрень / mr-1.ru
Hello
Цитата (Valick @ 10.01.2013 - 08:51)
вот что по этому поводу думает Сбер Банк

ЦБ != Сбербанк
http://www.cbr.ru/currency_base/
Цитата
Официальные курсы иностранных валют по отношению к рублю устанавливаются ежедневно (по рабочим дням) приказом Банка России, вступают в силу на следующий календарный день после дня установления


Цитата (Valick @ 10.01.2013 - 08:51)
я бы попробовал GROUP BY по типу и MAX() по дате

По ТЗ подходит ситуация что сегодня 2012-01-31 и ЦБ уже установил курс на завтра, и этот курс уже есть в БД.
MAX() точно не подходит

_____________
VPS от 5$, первые 2 месяца - бесплатно.
Michael
Цитата (S.Chushkin)
Michael почти прав и всё же не прав.

Обрати внимание на задание:
Цитата
Написать SQL запрос который выберет текущий курс для каждой валюты.
...
Результатом запроса должен быть:
USD 29
EUR 40,3

Т.е. в задании очевидно имеется ввиду текущий курс - это теперь, т.е. момент выполнения запроса.

Если бы было задание найти текущий курс на любую дату, это было бы более общее задание, но не оно требуется к выполнению.
Это тоже момент для оценки - выполнять что требуется.

_____________
There never was a struggle in the soul of a good man that was not hard
Valick
Цитата
По ТЗ подходит ситуация что сегодня 2012-01-31 и ЦБ уже установил курс на завтра

где в задании написано ЦБ?
но даже если так, то мой запрос легко отредактировать добавив date <= [NOW() или опеределенная дата], а теперь я бы хотел посмотреть ваш запрос без GROUP BY & MAX() c одним только NOW()...
но сначала ответьте на вопрос, почему ЦБ, потому что вам так сильно хочется? smile.gif
по мне так лучше написать универсальный запрос, который может работать не только с ЦБ, но и с теми банками которые хоть 100 раз на день меняют курс

_____________
Стимулятор ~yoomoney - 41001303250491
dron4ik
Цитата (Valick @ 10.01.2013 - 04:50)
1) указывая конкретную дату вы каждый день будете переписывать запрос?
Valick
dron4ik, smile.gif
в теме уже написано про NOW(), но этого мало

_____________
Стимулятор ~yoomoney - 41001303250491
S.Chushkin
Цитата (Michael @ 10.01.2013 - 13:11)
... Это тоже момент для оценки - выполнять что требуется.

Может быть, может быть...

Кстати, запрос получается не совсем элементарный. Что-то вроде:
select j.* from (
select currency, max(date) d from table tt
where date <= ...
group by currency) t
left join table j on j.currency = t.currency and j.date = t.d

и "currency,date" должно быть уникальным
п.с.
И не факт, что это наилучший. Возможно с union будет более эффективный, хотя и не универсальный.

_____________
Рекламка / ad.pesow.com Хрень / mr-1.ru
Valick
S.Chushkin, на то оно и тестовое задание, отправил вам писмецо, не хотел выкладывать готовый запрос, но вы уже практически его показали
Возможно с union
что-то сильно сомневаюсь, поэтому даже не думал в этом направлении

_____________
Стимулятор ~yoomoney - 41001303250491
Oyeme
SELECT * FROM data WHERE data IN (
SELECT
MAX(DATE_FORMAT(data,"%Y-%m-%d"))
FROM data
GROUP BY currency
)
GROUP BY currency
Valick
Oyeme, тестили? судя по отсутствию обратных кавычек нет
можете не пробовать, не работает так как надо
могу даже рассказать почему не верно

_____________
Стимулятор ~yoomoney - 41001303250491
S.Chushkin
Цитата (Valick @ 10.01.2013 - 14:20)
Возможно с union
что-то сильно сомневаюсь, поэтому даже не думал в этом направлении

Я тоже не уверен в большей эффективности, поэтому тестировать надо (на реальных данных).
А запрос элементарный:
(select * from table
where
currency= "usd" and date <= ...
order by date desc
limit
1)
union
(select * from table
where
currency= "eur" and date <= ...
order by date desc
limit
1)


_____________
Рекламка / ad.pesow.com Хрень / mr-1.ru
Valick
S.Chushkin, ну...
а если валют будет не 2, а 100? я конечно понимаю что его можно собрать не руками, но за 100 селектов мускул вам точно спасибо не скажет smile.gif

_____________
Стимулятор ~yoomoney - 41001303250491
S.Chushkin
Цитата (Valick @ 10.01.2013 - 15:06)
S.Chushkin, ну...
а если валют будет не 2, а 100? я конечно понимаю что его можно собрать не руками, но за 100 селектов мускул вам точно спасибо не скажет smile.gif

Ну 100 и 100, не важно.
Повторюсь, - тестировать надо, на реальных данных. И дело не в количестве запросов, а в скорости выполнения запроса. Какой из них эффективнее - я не знаю. Хотя первый выглядит заметно красивше smile.gif
С другой стороны, в реальной системе всё равно результат будет кешироваться, поэтому разница в 0.01 и даже в 0.1 секунд в запросах не имеет значения (как правило).


_____________
Рекламка / ad.pesow.com Хрень / mr-1.ru
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.