Правила     Закладки     Карма    Календарь    Журналы    Помощь    Поиск    PDA    Чат   
        СМС-ки
   
Пейджер выключен!
Страницы: (7) 1 [2] 3 4 ... Последняя » ( Перейти к первому непрочитанному сообщению )  
Фильтр авторов:    показать 
  скрыть
  Ответ в темуСоздание новой темыСоздание опроса

> Тестовое задание - помогите выполнить, Прислали мне тестовое задание
Michael  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 6065
Пользователь №: 18498
На форуме: 7 лет, 4 месяца, 7 дней
Карма: 256




Тут фишка в том, что они вносят в БД по дате курс и он становится с этого момента текущим.

Есть "самая поздняя" запись
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
PM
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Michael  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 6065
Пользователь №: 18498
На форуме: 7 лет, 4 месяца, 7 дней
Карма: 256




Цитата (aRpi)
ВОТ КАК Я ЕГО РЕШИЛ (прям так и написал в ответе):

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

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


--------------------
There never was a struggle in the soul of a good man that was not hard
PM
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
S.Chushkin  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Пофигист
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 777
Пользователь №: 36058
На форуме: 3 года, 11 месяцев, 6 дней
Карма: 40




Michael почти прав и всё же не прав.
"Текущий курс" это курс на текущую дату. Текущей датой может быть любая дата в принципе, заданная юзером, но как правило используют дату на "сегодня".
Т.е. задачу можно описать так: найти последние записи по всем валютам с датой <= текущей. (в пределах теста, конечно)

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


--------------------
PM
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Hello  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 837
Пользователь №: 32378
На форуме: 4 года, 6 месяцев, 23 дня
Карма: 50




Цитата (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 месяца - бесплатно.
PM
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Michael  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 6065
Пользователь №: 18498
На форуме: 7 лет, 4 месяца, 7 дней
Карма: 256




Цитата (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
PM
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Valick  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 5490
Пользователь №: 35718
На форуме: 4 года, 14 дней
Карма: 167




Цитата
По ТЗ подходит ситуация что сегодня 2012-01-31 и ЦБ уже установил курс на завтра

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


--------------------
wmr - R281553014107
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
dron4ik  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 1690
Пользователь №: 31058
На форуме: 4 года, 10 месяцев, 23 дня
Карма: 24




Цитата (Valick @ 10.01.2013 - 04:50)
1) указывая конкретную дату вы каждый день будете переписывать запрос?

date("Y-m-d");


--------------------
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Valick  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 5490
Пользователь №: 35718
На форуме: 4 года, 14 дней
Карма: 167




dron4ik, smile.gif
в теме уже написано про NOW(), но этого мало


--------------------
wmr - R281553014107
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
S.Chushkin  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Пофигист
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 777
Пользователь №: 36058
На форуме: 3 года, 11 месяцев, 6 дней
Карма: 40




Цитата (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 будет более эффективный, хотя и не универсальный.


--------------------
PM
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Valick  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 5490
Пользователь №: 35718
На форуме: 4 года, 14 дней
Карма: 167




S.Chushkin, на то оно и тестовое задание, отправил вам писмецо, не хотел выкладывать готовый запрос, но вы уже практически его показали
Возможно с union
что-то сильно сомневаюсь, поэтому даже не думал в этом направлении


--------------------
wmr - R281553014107
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Oyeme  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Reality is wrong. Dreams are for real
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 1672
Пользователь №: 16955
На форуме: 7 лет, 9 месяцев, 8 дней
Карма: 94




SELECT * FROM data WHERE data IN (
SELECT
MAX(DATE_FORMAT(data,"%Y-%m-%d"))
FROM data
GROUP BY currency
)
GROUP BY currency


--------------------
Programming: Private lessons via skype £45/h

Частные уроки в Лондоне / удаленно по skype.
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Valick  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 5490
Пользователь №: 35718
На форуме: 4 года, 14 дней
Карма: 167




Oyeme, тестили? судя по отсутствию обратных кавычек нет
можете не пробовать, не работает так как надо
могу даже рассказать почему не верно


--------------------
wmr - R281553014107
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
S.Chushkin  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Пофигист
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 777
Пользователь №: 36058
На форуме: 3 года, 11 месяцев, 6 дней
Карма: 40




Цитата (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)


--------------------
PM
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Valick  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 5490
Пользователь №: 35718
На форуме: 4 года, 14 дней
Карма: 167




S.Chushkin, ну...
а если валют будет не 2, а 100? я конечно понимаю что его можно собрать не руками, но за 100 селектов мускул вам точно спасибо не скажет smile.gif


--------------------
wmr - R281553014107
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
S.Chushkin  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Пофигист
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 777
Пользователь №: 36058
На форуме: 3 года, 11 месяцев, 6 дней
Карма: 40




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

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


--------------------
PM
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
  Быстрый ответ
Информация о Госте
Введите Ваше имя
Кнопки кодов
Для вставки цитаты, выделите нужный текст и
НАЖМИТЕ СЮДА
Введите сообщение
Смайлики
:huh:  :o  ;) 
:P  :D  :lol: 
B)  :rolleyes:  <_< 
:)  :angry:  :( 
:unsure:  :blink:  :ph34r: 
     
Показать всё

Опции сообщения  Включить смайлики?
 Включить подпись?
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:

Опции темыСтраницы: (7) 1 [2] 3 4 ... Последняя » Ответ в темуСоздание новой темыСоздание опроса