Модераторы: skyboy

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Задачка на собеседовании.. как такое сотворить?.. 
:(
    Опции темы
Kurt
Дата 6.9.2005, 13:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Увлеченный
***


Профиль
Группа: Участник Клуба
Сообщений: 1662
Регистрация: 22.8.2003
Где: Краснодар

Репутация: 1
Всего: 36



Ох.. вот он какой - северный олень.. smile
Все понял, всем спасибо. smile
Из всего этого топика я вынес главную мысль - если мне когда-нибудь понадобится хранить историю валют, я буду придумывать какую-нибудь другую структуру.


--------------------
Для корабля, который не знает куда плыть, нет попутного ветра... ((С) Архимед)
...
Все знают, что это невозможно. Но случайно находится невежда, который этого не знает. Он-то и делает открытие.. ((С) А. Эйнштейн)
PM ICQ   Вверх
Kurt
Дата 16.10.2005, 02:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Увлеченный
***


Профиль
Группа: Участник Клуба
Сообщений: 1662
Регистрация: 22.8.2003
Где: Краснодар

Репутация: 1
Всего: 36



Недавно мой знакомый нашел простое и очень логичное решение этой задачи для PostgreSQL:
Код

select distinct on (vname) vdate, vname, vval 
from mtest
order by vname, vdate desc

Я удивлен, как все продумано и красиво. smile
Мне начинает нравится эта СУБД. smile


--------------------
Для корабля, который не знает куда плыть, нет попутного ветра... ((С) Архимед)
...
Все знают, что это невозможно. Но случайно находится невежда, который этого не знает. Он-то и делает открытие.. ((С) А. Эйнштейн)
PM ICQ   Вверх
s
Дата 27.10.2005, 10:06 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Заинтересовала эта задача. К сожалению с MySQL не работаю, а на MSSQL не проще будет так

Код

declare @t table ( vdate datetime, vname nchar(4), vval money )

insert into @t
    select '2000-01-02', 'USD', 20.5
    union all
    select '2000-01-04', 'EURO', 21.5
    union all
    select '2000-06-04', 'EURO', 25.5
    union all
    select '2001-03-07', 'USD', 30.0
    union all
    select '2005-01-07', 'USD', 17.0
    union all
    select '2005-04-14', 'EURO', 23.0


SELECT vdate, vname, vval FROM @t 
WHERE vdate IN ( SELECT MAX(vdate) AS max_vdate FROM @t GROUP BY vname )

  Вверх
Ignat
Дата 27.10.2005, 10:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Флудератор
****


Профиль
Группа: Экс. модератор
Сообщений: 4030
Регистрация: 19.4.2004
Где: غيليندزيك مدينة

Репутация: 21
Всего: 73



Цитата(s @ 27.10.2005, 11:06)
Заинтересовала эта задача. К сожалению с MySQL не работаю, а на MSSQL не проще будет так

Весь прикол в том, что MYSQL ранее не поддерживала подселекты и хранимки. Следовательно с такими ограничениями решить в один запрос оказывается очень сложно и не рационально.


--------------------
Теперь при чем :P
PM   Вверх
Settler
Дата 23.4.2008, 01:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 23.4.2008

Репутация: нет
Всего: нет



Доброй ночи! Бился сегодня над решением этой задачи, т.к. у себя на сайте нужно было выводить пользователей и кто где находится, только вместо цены были зарегестрированные пользователи, а в место валюты айпиадрес, теперь обновляю и смотрю какую страницу яндекс индексирует))) да и вообще кто где находится))

Вот под задачу вашу запрос будет выглядеть так (я даже удивися что так просто и работает)
Код

$sql_zapros = "SELECT * FROM mtest WHERE vdate > 1 GROUP BY vname ORDER BY vval";
Таким образом таблица
+------------+-------+------+
| vdate      | vname | vval |
+------------+-------+------+
| 2000-01-02 | USD  | 20.5 |
| 2000-01-04 | EURO  | 21.5 |
| 2000-06-04 | EURO  | 25.5 |
| 2001-03-07 | USD  |  30 |
| 2005-01-07 | USD  |  17 |
| 2005-04-14 | EURO  |  23 |
+------------+-------+------+

отгруппируется ПО ДЕНЕЖНОМУ ЗНАКУ (который отсортируется относительно максимума даты) и выведеся это всё по максимальному значению цены и получится

| 2005-04-14 | EURO  |  23 |
| 2005-01-07 | USD  |  17 |


можно выводить относительно даты, в запросе ORDER BY vval меняем на vdate - в данном конкретном примере вывод не поменяется но если строк в таблице много самых разных, то вывод будет другой smile

Это сообщение отредактировал(а) Settler - 23.4.2008, 01:38
PM MAIL   Вверх
Страницы: (3) Все 1 2 [3] 
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MySQL | Следующая тема »


 




[ Время генерации скрипта: 0.0418 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.